본문 바로가기
백엔드(Back-End)/Spring Boot

[스프링부트] IoC, Di, 컨테이너

by 기딩 2023. 12. 5.
728x90

제어의 역전 IoC (Inversion of Control)

- 구현 객체가 프로그램의 제어흐름을 스스로 조종하는 건 자연스러운 흐름

- 반면, AppConfig가 등장하며, 구현 객체는 자신의 로직을 실행하는 역할만 담당. 제어 흐름은 AppConfig가 가짐

 

이런 것처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라, 외부에서 관리하는 것을 제어의 역전(IoC)

 

프레임워크 vs 라이브러리

프레임워크가 내 코드를 제어 & 실행 => 프레임워크 o (Junit)

내 코드를 직접 제어흐름 담당 => 라이브러리 (xml, json, ... )

 

의존관계 주입 DI (Dependency Injection)

"정적인 클래스 의존 관계"

- 클래스의 import를 보고 의존관계 파악 o

- 애플리케이션 실행 안 해도 분석 o

 

"동적인 객체(인스턴스) 의존 관계"

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

- 실행시점(런타임) 에 외부에서 실제 구현 객체를 생성하고, 클라이언트에 전달해서, 클라이언트와 서버의 실제 의존관계가 연결 = 의존관계 주입

- 객체 인스턴스를 생성 -> 참조값 전달

So, 정적인 클래스 의존관계 변경하지 않고, 동적인 객체 인스턴스 의존관계 쉽게 변경 o

 

IoC 컨테이너 := DI 컨테이너

말 그대로 IoC, DI를 해주는 컨테이너

의존관계 연결

의존관계 주입에 초점 -> 최근에는 주로 DI컨테이너

또는 어샘블러, 오브젝트 팩토리 라고 불린다.

 

728x90