[Spring] 스프링 컨테이너 & DI(Dependency Injection)
IOC(Inversion Of Control) 컨테이너
컨테이너란?
- 컨테이너는 어플리케이션을 관련 라이브러리 및 종속항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 제공한다.
- 컨테이너는 보통 인스턴스의 생명주기 관리와 추가적인 기능을 제공한다.
- 서블릿 컨테이너는 서블릿의 생성, 생성 후 초기화, 서비스 실행, 소멸에 관한 권한을 가지고 있다.
- 개발자가 직접 서블릿을 생성하고 서비스하지 않는다.
- 스프링 컨테이너는 스프링 컨테이너의 핵심부에 있으며 , 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.
IOC(Inversion Of Control)란?
- ioc는 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
- 즉 인스턴스 생성에서 소멸까지 생명주기 관리를 개발자가 아닌 컨테이너가 담당한다는 것이다.
- 컴포넌트 의존관계 결정, 설정, 및 생명주기를 해결하기위한 디자인 패턴중 하나이다.
- ioc는 객체간의 결합도를 줄이고 유연한 코드를 작성하게 되어 가독성 및 코드의 중복 유지보수를 편하게 할 수 있다.
IoC 구현방법
- DL(Dependency Lookup, 의존성 검색)
- 저장소에 저장되어 있는 bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup
- EJB, Spring등에서 지원
- DI(Dependency Injection, 의존성 주입)
- 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결한다.
- 의존성 주입방법
- Constructor Injection
- Method Injection
- Field Injection
*DI의 장점
- Dependency Reduction : 객체 상호 간 의존성 관계를 줄여준다.
- Reusable Structure : 코드의 재사용과 조합이 용이하다.
- Readability : 코드들이 분리되어 가독성이 높다.
- Loose Coupling & Easy to change : 구조는 변화에 민감하지 않을 수 있다.
'Framework > Spring' 카테고리의 다른 글
[Spring] @Controller @RequestMapping @GetMapping @PostMapping (0) | 2020.12.01 |
---|---|
[Spring] Spring Web MVC (0) | 2020.11.25 |
[Spring] xml을 기반으로 한 bean 설정하기(1) (0) | 2020.11.24 |
[Spring] 스프링이란?? (0) | 2020.11.24 |
댓글