Spring - DI 에서 스프링 DI의 성격을 설명했는데,
변경에 유리한 코드(다형성)을 설명하는 예시 코드들을 설명하려고 한다.
SportsCar, Truck 의 객체들 중 원하는 객체만 생성하려고 한다. 단, 변경에 유리한 코드로 구성해야한다.(계속 객체를 생성해서 관리점이 많아지는 코드가 아닌 단순히 key 값만 변경해서 가져 오는 변경점이 적은 코드를 만들어야한다)
config.txt 파일 생성 후 key, value 설정(SportsCar 객체)
car=di.SportsCar
Key | value |
---|---|
car | di.SportsCar |
변경하고 싶은 대상(SportsCar, Truck)은 같은 객체(Car)에 상속받아야 한다.
import java.io.FileReader;
import java.util.Properties;
class Car {}
class SportsCar extends Car {}
class Truck 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 p = new Properties();
File file = new File("src/di/config.txt");
p.load((new FileReader(file)));
Class clazz = Class.forName(p.getProperty("car"));
return (Car)clazz.newInstance();
}
}
결과(SportsCar 객체 생성)
car = di.SportsCar@22f71333
config.txt
car=di.Truck
결과(Truck 객체 생성)
car = di.Truck@22f71333
config.txt 의 value 변경만으로 객체를 변경할 수 있어, 관리 포인트가 줄어 드는 것을 알 수 있다.
Engine 이라는 key를 가진 객체도 추가할 수도 있다.
car=di.SportsCar
engine=di.Engine
Key | value |
---|---|
car | di.SportsCar |
engine | di.Engine |
import java.io.FileReader;
import java.util.Properties;
class Car {}
class SportsCar extends Car {}
class Truck extends Car {}
class Engine extends Car {}
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 p = new Properties();
File file = new File("src/di/config.txt");
p.load((new FileReader(file)));
Class clazz = Class.forName(p.getProperty(key));
return (Car)clazz.newInstance();
}
}
결과
car = di.SportsCar@22f71333
engine = di.Engine@13969fbe
출처 : 남궁성 저자의 스프링의 정석(패스트 캠퍼스)(https://fastcampus.co.kr/dev_academy_nks)