IoC(Inversion Of control)
IoC의 개념
- 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀜을 의미
- 컴포넌트 의존관계 결정(component dependency resolution), 설정 (configuration) 및 생명주기를 해결하기 위한 디자인 패턴 (Design Pattern)
IoC 컨테이너
- 스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다.
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리
- POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
- 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너 에게 맡긴다.
IoC의 분류
- IoC는 DL, DI로 나뉜다.
- DL (Dependency Lookup) - EJB, Spring / 특정 컨테이너에 종속
- DI (Dependency Injection) - Spring, PicoContainer
DI
- Setter Injection
- Constructor Injection
- Method Injection
DL과 DI
- DL 의존성 검색 : Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean 찾기
- DI 의존성 주입 : 각 클래스간 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결
- DL 사용시 컨테이너 종속성이 증가하여 주로 DI를 사용함
DI
DI의 개념
- 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
- xml이나 어노테이션으로 설정
- 개발자들은 단지 의존관계가 필요하다는 정보를 추가하면 된다.
- 객체 레퍼런스 컨테이너로부터 주입받아, 실행 시 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해준다.
- 장점 - 코드 단순 / 컴포넌트간 결합도가 제거됨
DI의 유형
Setter injection
- setter 메소드를 만들고 이를 통해 의존성 주입
Constructor injection
- 생성자를 만들고 이를 통해 의존성 주입
Method injection
- 의존성을 입력받는 일반 메서드를 만들고 이를 통해 의존성 주입
DI를 이용한 클래스 호출방식
Setter Injection
- 한번에 한개씩 만 의존관계 주입 가능
Constructor Injection
- 여러개의 인자를 받는 생성자 선언 가능
Spring DI 컨테이너
Spring DI 컨테이너의 개념
- Spring DI 컨테이너가 관리하는 객체를 Bean 이라고 하고, 이 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리 (Bean Factory)라고 부른다.
- 객체의 생성과 객체 사이의 런타임 관계를 DI관점에서 볼때는 컨테이너를 beanfactory 라고 한다.
- Bean Factory에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스 (Application Context)라고 부른다.
BeanFactory , Application Context
BeanFactory
- Bean을 등록 생성 조회 반환 관리함
- 보통은 BeanFactory로 바로 사용하지 않고, 이를 확장한 Application Context를 사용함
- getBean() 메서드가 정의되어 있음
Application Context
- Bean 을 등록 생성 조회 반환 관리기능은 빈팩토리와 같음
- Spring 의 각종 부가 서비스를 추가제공
- Spring 이 제공하는 Application Context 구현 클래스가 여러 종류가 있다.
'Back-end > Spring' 카테고리의 다른 글
DI 애플리케이션 작성(2) (0) | 2021.06.10 |
---|---|
DI 애플리케이션 작성(1) (0) | 2021.06.10 |
Spring Project 시작하기 (0) | 2021.06.09 |
Spring Framework 개요 (0) | 2021.06.09 |
Framework 개념 (0) | 2021.06.09 |