본문 바로가기

back-end/spring

spring/ 관심사 분리SoC, 제어의 역전IoC, 의존 관계 주입 DI

 

 

관심사 분리 SoC; Separation of Concerns

 

public class OrderServiceImpl implements Order {
    //private Ramen ramen = new ShinRamyun;
    private Ramen ramen = new JinRamen;
}

 

인터페이스를 구현하는 클래스를 클라이언트 코드에서 직접적으로 선택해서 사용하는 경우, 클라이언트인 Person이 Ramen 인터페이스와 Ramen 인터페이스를 구현하는 ShinRamyun까지 함께 의존한다. 따라서 ShinRamyun을 JinRamen으로 변경하고자 할 경우 클라이언트 측의 코드의 변경이 일어나게 된다. 이는 의존 관계 역전 원칙(DIP)를 위반한다.

 

관심사를 분리해 클라이언트가 인터페이스에만 의존하도록 수정해야 한다.

 

public class OrderServiceImpl implements Order {
    private Ramen ramen;
}

 

OrderServiceImpl은 이제 Rame 인터페이스만 의존하게 된다. Ramen을 구현하는 클래스를 대신 생성하고, 주입하는 과정이 필요하다.

 

AppConfig

애플리케이션 사용 영역과 객체를 생성하고 구성하는 Configuration 영역으로 분리

 

제어의 역전 IoC; Inversion of Control

Config 클래스가 프로그램의 제어 흐름을 갖는다.

 

의존 관계 주입 DI; Dependency Injection

정적인 클래스 의존 관계 <- import

정적인 클래스 의존 관계만으로는 실제로 어떤 객체가 주입될지 알 수 없음

동적인 객체 인스턴스 의존 관계

애플리케이션 실행 시점에서 실제로 생성된 객체 인스턴스의 참조가 연결된 의존 관계

 

DI 컨테이너 = IoC 컨테이너

객체를 생성하고 관리하면서 의존 관계를 연결해주는 것