IoC, DI, 컨테이너

인프런 스프링 핵심 원리 - 기본편 수강 중

IoC(Inversion of Control): 제어의 역전

  • 개발자가 원하는 데로 객체 생성 및 호출해서 개발자가 직접 제어
  • 하지만 프레임워크가 제어권을 가져가게 되어 IoC라고 불린다.

프레임워크 vs 라이브러리

  • 프레임워크: 내가 작성한 코드를 제어하고 대신 실행
  • 라이브러리: 내가 작성한 코드가 직접 제어의 흐름을 담당

DI(Dependency Injection): 의존관계 주입

  • OrderServiceImpleDiscountPolicy 인터페이스에만 의존
  • 어떤 구현 객체가 사용될지(FixDiscountPolicy일지 RateDiscountPolicy일지) 모름

정적 클래스 의존관계

  • 정적 의존 관계는 클래스가 사용하는 import 코드만 보고 쉽게 판단 가능 그림1
  • OrderServiceImplMemberRepository, DiscountPolicy에 의존한다는 것을 알 수 있음
  • 하지만 어떤 객체가 OrderServiceImple에 주입 될지는 알수 없음

동적 클래스 의존 관계

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

그림2

  • 실행 시점에 파악이 가능
  • 의존관계 주입: 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성해서 실제 의존관계가 연결되는 것

컨테이너(IoC 컨테이너, DI 컨테이너)

AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다.

  • 의존관계 주입에 초점을 맞추기 떄문에 최근에는 주로 DI 컨테이너라고 함
  • 어셈블러, 오브젝터 팩토리 등으로 불리기도 함

[참조] 인프런 스프링 핵심 원리 - 기본편 - 링크

끝!