본문으로 바로가기

이번 글에서는 DI(Denpendency Injection)를 설명하며 이것이 어떻게 OCP, DIP위반 문제를 해결하는지에 대해서 알아보도록 한다.

 

DI(Denpendency Injection)란

 

- 말 그대로 의존성을 주입한다는 것이다.

 

1
2
3
4
5
public class Car {
//     private Engine engine = new EngineA();
    private Engine engine = new EngineB();
}
 
cs

 

위의 상황에서 Car 클래스는 구현체인 EngineB, EngineA에 의존한다.(DIP 위반)

Car가 사용하는 엔진을 교체하려면 코드 수정이 필요하다(OCP 위반)

위의 코드를 DI를 사용해 수정한다면 아래 그림과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Car {
 
    Engine engine;
 
    public Car(Engine engine) {
        this.engine = engine;
    }
 
    public void setEngine(Engine engine) {
        this.engine = engine;
    }
    
}
cs

 

이렇게 생성자나 Setter를 통해 Engine Interface를 상속받아 구현된 클래스의 인스턴스를 실행시점에 외부에서 누군가가 주입해주게 되면 Car는 직접 구현체를 선택하지 않아도 되며 Engine이라는 interface 즉, 추상화에만 의존한다(DIP위배 해결), 코드를 수정할 필요가 없어진다(OCP 위배 해결).

 

Spring에서 DI 컨테이너는 위에서 언급한 문구 "인스턴스를 실행시점에 외부에서 누군가가 주입해주게 되면..." 에서 누군가의 역할을 수행한다.

 

다음 글에서 DI 컨테이너에 대해 좀 더 자세히 다뤄보도록 하자.

 

#Reference

스프링 핵심 원리 - 기본편 (김영한)

www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

'Spring' 카테고리의 다른 글

Spring의 DI 컨테이너 (IOC 컨테이너)  (0) 2020.11.08
Spring 과 객체지향(SOLID)  (0) 2020.11.02