패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기
Spring DI (의존성 주입, Dependency Injection)
Tech_JINI
2025. 4. 1. 13:08
변경에 유리한 코드1 - 다형성, factory method
변경에 유리한 코드2 - Map과 외부파일
수정사항이 있을 때, 코드는 변경하지 않고 파일만 변경하는 것은 굉장한 이점이다.
코드를 변경하게 되면, 결국 코드에 대한 테스트를 해봐야하기 때문에.
프로그램의 변경을 어떻게 최소화할 지 고민해보는 것이 중요하다.
프로그램을 변경시키지 않기 위해 변경포인트를 최대한 분리시키는게 중요하다.
분리는 (1) 변하는 것, 변하지 않는 것의 분리
(2) 관심사의 분리
(3) 중복코드의 분리 (AOP)
더보기
Main1.java
package com.fastcampus.ch3.diCopy1;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
class Car {}
class SportsCar extends Car {}
class Trunk extends Car {}
public class Main1 {
public static void main(String[] args) throws Exception {
Car car = getCar();
System.out.println("car = " + car);
}
static Car getCar() throws Exception {
Properties prop = new Properties();
prop.load(new FileReader("config.txt"));
Class clazz = Class.forName(prop.getProperty("car"));
return (Car)clazz.newInstance();
}
}
더보기
config.txt
car=com.fastcampus.ch3.diCopy1.SportsCar
Main1을 실행시켰을 때,
car = com.fastcampus.ch3.diCopy1.SportsCar@70177ecd
라고 출력된다. 출력 시에 SportsCar가 아닌 Trunk으로 출력되길 원할 때에는 config.txt 파일만 수정하면 된다.
조금 더 유용하게 코드를 바꿨다.
더보기
Main1.java
package com.fastcampus.ch3.diCopy1;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
class Car {}
class SportsCar extends Car {}
class Trunk extends Car {}
class Engine {}
public class Main1 {
public static void main(String[] args) throws Exception {
Car car = (Car)getObject("car");
Engine engine = (Engine)getObject("engine");
System.out.println("car = " + car);
System.out.println("engine = " + engine);
}
static Object getObject(String key) throws Exception {
Properties prop = new Properties();
prop.load(new FileReader("config.txt"));
Class clazz = Class.forName(prop.getProperty(key));
return clazz.newInstance();
}
}
더보기
config.txt
car = com.fastcampus.ch3.diCopy1.SportsCar
engine = com.fastcampus.ch3.diCopy1.Engine
Main1을 실행시키면 아래와 같은 출력이 나온다.
car = com.fastcampus.ch3.diCopy1.SportsCar@1e80bfe8
engine = com.fastcampus.ch3.diCopy1.Engine@cc34f4d