Spring - IoC, DI, DI 컨테이너

YUNU·2023년 8월 1일
0

스프링

목록 보기
10/33
post-thumbnail

🌱 Spring


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

구현 객체는 자신의 로직을 실행하는 역할만 담당
구현 객체는 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모름

프로그램의 제어 흐름은 AppConfig가 소유

프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부(DI 컨테이너 or IoC 컨테이너)에서 관리하는 것
-> IoC

프레임워크 vs 라이브러리

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

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

의존관계

🔹 정적인 클래스 의존관계 -> import 코드만 보고 의존관계 파악 가능
ex) OrderServiceImpl에서 import OrderPolicy // OrderServiceImpl은 OrderPolicy 의존

🔹 동적인 객체(인스턴스 의존관계) - 실행 시점에 결정
애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
ex) OrderPolicy에 QROrderPolicy가 들어올지 TabletOrderPolicy가 들어올지

  • 객체 인스턴스를 생성하고, 그 참조값을 전달해서 연결

  • 클라이언트 코드를 변경하지 않고
    (정적인 클래스 의존관계를 수정하지 않고, 애플리케이션 코드를 수정하지 않고)
    클라이언트가 호출하는 인스턴스 변경 가능
    (동적인 객체 인스턴스 의존관계를 쉽게 변경 가능)

애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것 -> DI(의존관계 주입)


🟦 DI 컨테이너

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

IoC컨테이너, 오브젝트 팩토리, 어샘블러 등으로도 불림


인프런 스프링 핵심 원리 - 기본편 (김영한) 참조

profile
DDeo99

0개의 댓글