Spring DI 흉내내기

개발세발·2024년 2월 8일

변경에 유리한 코드- 다형성, factory method

  • 프로그램에 변경사항이 발생했을 때 변경할 부분을 최대한 줄이는 코드.
  • 변하는 것과 변하지 않는 것, 관심사의 분리, 중복 코드의 분리(AOP)
package com.fastcampus.ch3.diCopy1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
class Car{ }
class sportCar extends Car{}
class Truck 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 p = new Properties();
        p.load(new FileReader("config.txt"));
        Class clazz = Class.forName(p.getProperty(key));
        return clazz.newInstance();
    }
}

-config.txt 파일

car=com.fastcampus.ch3.diCopy2.diCopy1.sportCar
engine=com.fastcampus.ch3.diCopy2.diCopy1.Engine

내용

  • getObject(): config.txt에 key=value로 저장된 파일을 FileReader로 읽어와서 Properties로 load.
  • return 타입이 Object이기 때문에 getObject()실행할 때 (Car),(Engine)형변환.
  • 따라서 클래스를 호출할 때 코드를 변경하는 것이 아니라 config.txt에 있는 value에서 호출할 클래스의 이름만 변경해주면 됨.(변경에 유리한 코드)

0개의 댓글