2023. 7. 11. 00:29ㆍSpring/[inflearn]스프링 핵심 원리 - 기본편
◎ IOC(Inversion Of Control, 제어의 역전)
-> AppConfig 적용 전의 코드는 클라이언트 구현 객체가 필요한 구현 객체를 직접 생성, 연결, 실행했다. 클라이언트 코드가 프로그램의 흐름을 제어했다.
-> AppConfig를 적용한 후는 구현 객체를 생성하고 연결 역할을 AppConfig에 부여하여 프로그램의 제어흐름을 AppConfig가 가져갔다. 이제 프로그램의 흐름은 AppConfig가 제어한다. 이렇게 프로그램의 흐름을 직접 제어하는 것이 아닌 AppConfig와 같이 외부에서 흐름을 제어하는 것이 제어의 역전이다.
◎ DI(Dpendency Injection, 의존관계 주입)
-> OrderServiceImpl은 DiscountPolicy인터페이스를 의존한다. 이런 관계를 의존관계라 한다.
-> 의존관계에는 정적인 클래스 의존관계와 실행시점에 결정되는 동적인 객체 의존관계로 구분한다.
-> 정적인 클래스 의존관계 : 클래스가 사용하는 import 코드만 보고 의존관계를 판단할 수 있는 관계. 애플리케이션을 실행하지 않아도 의존관계를 파악할 수 있다.
- OrderServiceImpl을 보면 MemberRepository와 DiscountPolicy를 의존하는 것을 알 수 있다.
- 클래스 의존관계 만으로는 어떤 구현 객체가 OrderServiceImpl에 주입되는지는 알 수 없다.
-> 동적인 클래스 의존관계 : 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계
- OrderServiceImpl에서 MemberService, DiscountPolicy 인터페이스 즉, 추상에 의존하고. 외부(AppConfig)에서 실제 구현 객체를 생성하고 연결한다. 클라이언트와 실제 의존관계가 연결되는 것을 의존관계 주입이라 한다.
- 의존관계 주입을 사용하면 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 변경할 수 있다.
◎ IoC컨테이너, DI 컨테이너
-> AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결하는 것을 IoC컨테이너 또는 DI컨테이너라고 한다.
☆ 참고
'Spring > [inflearn]스프링 핵심 원리 - 기본편' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈 (0) | 2023.07.12 |
---|---|
스프링으로 전환 (0) | 2023.07.11 |
객체 지향 원리 적용 - 관심사의 분리 (0) | 2023.07.10 |
새로운 할인 정책 개발 (0) | 2023.07.09 |
주문과 할인 도메인 설계 (0) | 2023.07.06 |