스프링을 다루다보면 IoC와 DI에 대해서 수 없이 많이 듣게 될 것이다.
이 글을 보는 사람들은 그런 것들을 듣고서 그냥 넘기는 사람이었다면 여기까지 찾아오진 않았을거라 생각하고 지금 이 글을 쓰고 있는 나와 같이 한 단계 더 나아가고자 하는 의지로 이 글을 읽고 있을 것이라고 생각한다.
모두 시간이 흐른 뒤 이런 경험들이 쌓여 성공적인 개발자가 되었으면 좋겠다.
IoC ?
IoC는 제어반전 또는 제어권의 역전 등 여러 의미로 해석되고 있지만 기본적인 의미는
오브젝트의 생성, 제거, 사용 및 주입 등의 작업을 개발자가 직접 어플리케이션 코드에 작성하는 대신 독립된 컨테이너가 담당하는 것을 뜻한다.
이를 컨테이너가 (빈) 오브젝트에 대한 제어권을 가지고 있다 해서 IoC (Invension of control) 이라고 한다.
객체관리 주체가 프레임워크(컨테이너)가 되기 때문에 개발자는 로직에 더 집중할 수 있게 되는 장점이 있다.
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
- POJO의 생성, 초기화, 소멸에 대한 권한을 가진다.
- 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
- 객발자는 비즈니스 로직에 집중할 수 있다.
- 객체 생성 코드가 없으므로 TDD가 용이하다.
TDD : Test-Driven-Development (테스트 주도 개발)
IoC는 다음과 같이 나누어 질 수 있다.
DL(Dependency Lookup) 과 DI (Dependency Injection)
DL : 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 lookup하는 것
DI : 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨에티너가 자동으로 연결해주는 것
- Setter Ingection (수정자 주입)
- Constructor Injection (생성자 주입)
- Method Injection (필드 주입)

DI 의 이해
개념 : 각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는것을 말함
- 개발자들은 빈 설정파일에서 의존관계가 필요하다는 정보만 추가하면 된다.
- 객체 레퍼런스를 컨테이너로부터 주입 받아서 실행 시에 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어서 어플리케이션 코드에 의존관계를 주입한다.
Spring DI 컨테이너
Spring DI 컨테이너가 관리하는 객체를 빈(Bean) 이라고 하며, 이 빈(Bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory) 라고 부른다.
이 빈팩토리에 여라가지 컨테이너 기능들을 추가하여 어플리케이션 컨텍스트(ApplicationContext)라고 부른다.

'Backend > Spring Framework' 카테고리의 다른 글
[Spring] REST API (0) | 2022.07.25 |
---|---|
[Spring] REST / RESTful (0) | 2022.07.25 |
[Spring] @Transactional @@@@@ (0) | 2022.01.21 |
Spring Web Layer (스프링 웹 계층) (0) | 2022.01.19 |
[Spring] Annotation @@@@@ 정리 (0) | 2022.01.14 |