IoC, DI, 컨테이너
인프런 스프링 핵심 원리 - 기본편 수강 중
IoC(Inversion of Control): 제어의 역전
- 개발자가 원하는 데로 객체 생성 및 호출해서 개발자가 직접 제어
- 하지만 프레임워크가 제어권을 가져가게 되어 IoC라고 불린다.
프레임워크 vs 라이브러리
- 프레임워크: 내가 작성한 코드를 제어하고 대신 실행
- 라이브러리: 내가 작성한 코드가 직접 제어의 흐름을 담당
DI(Dependency Injection): 의존관계 주입
OrderServiceImple
은DiscountPolicy
인터페이스에만 의존- 어떤 구현 객체가 사용될지(FixDiscountPolicy일지 RateDiscountPolicy일지) 모름
정적 클래스 의존관계
- 정적 의존 관계는 클래스가 사용하는 import 코드만 보고 쉽게 판단 가능
OrderServiceImpl
은MemberRepository
,DiscountPolicy
에 의존한다는 것을 알 수 있음- 하지만 어떤 객체가
OrderServiceImple
에 주입 될지는 알수 없음
동적 클래스 의존 관계
- 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
- 실행 시점에 파악이 가능
- 의존관계 주입: 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성해서 실제 의존관계가 연결되는 것
컨테이너(IoC 컨테이너, DI 컨테이너)
AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다.
- 의존관계 주입에 초점을 맞추기 떄문에 최근에는 주로 DI 컨테이너라고 함
- 어셈블러, 오브젝터 팩토리 등으로 불리기도 함
[참조] 인프런 스프링 핵심 원리 - 기본편 - 링크
끝!