[Spring] IoC, DI, Ioc/DI Container

DEINGVELOP·2023년 4월 12일
0

1. IoC (Inversion of Control)

제어의 역전

  • Spring에만 국한된 용어는 아님
  • 프로그램의 제어 흐름을 직접 제어하는 것이 아니라, 외부에서 관리하는 것
    • ex) AppConfig가 프로그램의 제어 흐름을 가져감

📌 Framework vs Library

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

2. DI (Dependency Injection)

의존성 주입

2-1. 정적인 클래스 의존관계

  • 클래스가 사용하는 import 코드만 보고도 의존 관계를 쉽게 파악할 수 있다.
  • 애플리케이션을 실행하지 않아도 분석할 수 있다.

2-2. 동적인 객체(인스턴스) 의존 관계

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

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

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

💡 의존관계 주입을 사용하면?

  • 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
  • 정적인 클래스 의존관계를 변경하지 않고(Application 코드를 손 대지 않고), 동적인 객체 인스턴스의 의존관계를 쉽게 변경할 수 있다.

3. IoC 컨테이너, DI 컨테이너

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

📌 모두 동의어!

  • 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라고 함!
  • Assembler라고도 불림 (레고를 조립하듯이 해서)
  • Object Factory라고도 불림 (오브젝트를 만들어낸다고 해서)

0개의 댓글