Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Spring
- MSA
- 페이징
- @ComponentScan
- 지연 로딩
- dockerhub
- AWS
- mybatis
- 스프링 부트
- JWT
- kafka
- DI
- Spring Data JPA
- docker
- JPA
- Spring Container
- docker compose
- securitycontextholderfilter
- @Transactional
- 서블릿 컨테이너
- redis
- JdbcTemplate
- Routing Key
- Web
- DLQ
- 컨테이너
- CORS
- JPQL
- 쿠버네티스
- Dead Letter Queue
Archives
- Today
- Total
look-forest
IoC/DI 컨테이너 본문
제어의 역전 IoC(Inversion of Control)
프로그래머가 직접 객체 생성, 연결하지 않고 프레임워크가 해준다. 즉, 프레임워크의 라이프 사이클 상에서 이루어진다.
이처럼 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다
스프링의 경우 빈에 대한 제어권을 프로그래머가 아닌 프레임워크가 가져감으로써, OCP, DIP 원칙을 가능케 해준다.
[예제]에서,
기존 코드는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다
그러나 AppConfig가 등장한 이후에 구현 객체는 자신의 로직을 실행하는 역할만 담당한다
→ 프로그램의 제어 흐름은 이제 AppConfig가 가져간다
의존관계 주입 DI(Dependency Injection)
애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고
클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것을 의존관계 주입이라 한다
클라이언트는 실제 어떤 구현 객체가 사용될지는 모른 채 인터페이스에만 의존 ← 주입된다
- 의존관계 주입을 사용하면
- 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상 타입의 인스턴스를 변경할 수 있다.
- 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다
IoC 컨테이너, DI 컨테이너
AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다.
(또는 어샘블러, 오브젝트 팩토리 등으로 불리기도 한다)
참고 자료
스프링 핵심 원리(김영한 님)
'Spring > Spring 핵심 원리' 카테고리의 다른 글
| 스프링 컨테이너와 스프링 빈 (0) | 2023.04.29 |
|---|---|
| [예제] SPRING으로 전환하기 (0) | 2023.04.29 |
| [예제] 스프링 없이 좋은 객체 지향 설계하기 (0) | 2023.04.29 |
| SOLID: 좋은 객체 지향 설계 5원칙 (0) | 2023.04.29 |
| 좋은 객체 지향 프로그래밍? (0) | 2023.04.29 |