관심사 분리 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 컨테이너
객체를 생성하고 관리하면서 의존 관계를 연결해주는 것
'back-end > spring' 카테고리의 다른 글
spring/ 의존 관계 자동 주입 - 생성자 주입을 사용하자 (0) | 2022.06.20 |
---|---|
spring/ 컴포넌트 스캔 (0) | 2022.06.20 |
spring/ 싱글톤 컨테이너 (0) | 2022.06.20 |
spring/ 스프링 컨테이너와 스프링 빈 (0) | 2022.06.17 |
spring 선수 지식/ 객체지향 SOLID (0) | 2022.06.16 |