본문 바로가기
Web/Spring Boot

[Spring] IoC/DI

by foreverever 2019. 4. 21.
반응형

1. IoC(Inversion of Control)

제어의 역전

  • 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
  • 개발자가 직접 객체를 생성하는 것이 아니라, 스프링 프레임워크(IoC 컨테이너)가 대신 해준다.

IoC 컨테이너(= Spring 컨테이너, DI 컨테이너)

  • 스프링 프레임워크는 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다. 즉, IoC 컨테이너 기능을 제공한다.
1. 객체의 생성, 의존성 관리

2. POJO의 생성, 초기화, 서비스, 소멸에 대한 권한 존재  
  (POJO : plain old java object로, 특정 플랫폼이나 규약에 종속되지 않는 객체를 의미한다. Java Bean을 의미)

3. 개발자가 직접 POJO를 생성할 수 있으나, 컨테이너에게 맡김

2. DI(Dependency Injection)

의존성 주입

  • 각 클래스간의 의존관계를 빈 설정 정보(XML, Annotation)를 통해 컨테이너가 자동으로 연결해주는 것
  • 개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보만 추가하면 된다.
  • 컨테이너가 흐름의 주체가 되어 의존관계를 주입 해주는 것이다.

장점

1. 코드가 단순해진다.
2. 컴포넌트(객체) 간의 결합도가 낮아진다.
3. 유지보수가 용이

DI의 유형

1. Setter Injection : Setter 메서드를 이용한 의존성 주입
2. Construction Injection : 생성자를 이용한 의존성 주입
3. Method Injection : 일반 메서드를 이용한 의존성 주입

3. Spring DI 컨테이너

  • DI 컨테이너가 관리하는 객체를 빈(Bean)이라고 명시
  • 빈(Bean)들을 관리한다는 의미로, 컨테이너를 빈 팩토리(Bean Factory)라고 부름

Bean Factory

  • Bean을 등록, 생성, 조회, 반환을 관리 (Bean의 생명주기를 관리)
  • getBean() 메서드가 정의되어 있음
  • 보통 Bean Factory를 확장한 ApplicationContext를 사용한다.

ApplicationContext

  • Bean Factory에 여러가지 컨테이너 기능을 추가한 것
  • Bean Factory의 업그레이드 버전
  • Spring이 제공하는 ApplicationContext 구현 클래스가 여러 종류가 존재함
  • Bean Factory와 ApplicationContext는 모두 인터페이스임
  • 궁극적으로 DI 컨테이너 역할을 함

4. 느낀점

용어가 많아 헷갈릴만 하다. 특히, IoC 컨테이너, DI 컨테이너, Spring 컨테이너, 애플리케이션 컨텍스트(ApplicationContext) 모두 같은 것임을 명심하면 좋겠다.

반응형

'Web > Spring Boot' 카테고리의 다른 글

@EventListener & @PostConstruct  (0) 2022.06.09
[Spring] @RestControllerAdvice  (0) 2019.07.16
[Spring] AOP  (0) 2019.06.26
[Spring] DI (Dependency Injection)  (0) 2019.06.24
[Spring] Logback 사용법(gradle)  (0) 2019.06.18