패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 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