본문 바로가기
Spring

[일지] 의존관계 주입의 필요성

by onejunu 2020. 10. 11.

# 객체 지향 설계에서 의존관계

class Car{

    // Engine 은 인터페이스 & SuperEngine 은 Engine의 구현체
    private final Engine engine = new SuperEngine();

    ...
}

위와 같은 코드가 있다고 가정해보자.

 

자동차는 반드시 엔진이 필요하다. 

 

그래서 처음 설계할 때, 자동차는 엔진이라는 인터페이스에 의존하도록 설계하였다.

 

인터페이스에 의존하는 것처럼 보이지만 실제는 그렇지 않다.

 

 

아래 그림처럼 되기를 원하지만 

 

실제는 아래와 같다.

 

 

만약 울트라 엔진으로 고친다면 아래처럼 Car의 코드를 수정해야한다.

 

class Car{

    // Engine 은 인터페이스 & UltraEngine 은 Engine의 구현체
    private final Engine engine = new UltraEngine();

    ...
}

 

 

Car 클래스가 엔진이라는 추상화에 의존하지 않고 구현체에도 의존하고 있다는 것이다. 

 

# 의존 관계를 구성하는 클래스를 따로 구성하자.

 

위 문제를 해결하는 방법은 아래처럼 구현체에 의존하지 않도록 생성자를 통해서 주입 받는 것이다.

class Car{

    // Engine 은 인터페이스
    private final Engine engine;

    public Car(Engine engine){
        this.engine = engine;
    }
    ...
}

 

 

이를 통해 기존의 코드를 수정하지 않고 부품처럼 원하는 것을 끼워 넣기 편하게 하기 위해서 의존관계 주입이 필요한 것이다.

댓글