은근한

Container (컨테이너), Inversion of Control (IoC, 제어의 역전) 본문

카테고리 없음

Container (컨테이너), Inversion of Control (IoC, 제어의 역전)

EsJoo 2017. 8. 27. 23:52

컨테이너

컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것

즉, 컨테이너란 작성한 코드의 처리과정을 위임 받는 독립적인 존재

컨테이너는 적절한 설정만 되어 있다면 누구의 도움없이도 프로그래머가 

작성한 코드를 스스로 참조한뒤 알아서 객체의 생성과 소멸을 컨트롤



스프링 컨테이너

스프링 프레임워크의 핵심부에 위치하며, 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.

프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로써 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다.

* 컨테이너가 맘대로 객체를 생성하는 것이 아니라 프로그램을 이용하는 이용자의 호출에 의해 컨테이너가 동작하게 되는 구조



스프링 컨테이너의 두 종류 ( 빈팩토리, 애플리케이션 컨텍스트)

빈팩토리 Bean Factory

DI의 기본사항을 제공하는 가장 단순한 컨테이너. 팩토리 디자인을 구현한 것

빈 팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스

빈 팩토리가 빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하기 전까지는 인스턴스화 하지 않는다 (Lazy loading)


애플리케이션 컨텍스트 ApplicationContext

빈 팩토리와 유사한 기능을 하며 추가적으로 제공하는 기능들이 더 많다.


따라서, 대부분의 애플리케이션은 후자를 택하는 경우가 많다.


빈 팩토리는 Lazy Loading


애플리케이션 컨텍스트는 컨텍스트 초기화 시점에서 모든 싱글톤 빈을 미리 로드한 후 

애플리케이션 실행 후 빈을 지연 없이 얻을 수 있다.

(빈을 미리 생성해 놓고 빈이 필요할 때 즉시 사용 할 수 있다.)



Inversion of Control, IoC

IoC란 프로그램의 제어 흐름 구조가 바뀌는 것이며, 외부에서 제어를 한다는 것이다.

즉, IoC는 바로 컨테이너이다.


* 기존에 자바 애플리케이션을 개발할 때 자바 객체를 생성하고 서로간의 의존관계를 연결시키는 작업에 대한 제어권은 보통 개발되는 애플리케이션에 있었다. 

그러나 Servlet, EJB 등을 사용하는 경우 Servlet Container, EJB Contrainer에게 제어권이 넘어가서 객체의 생명주기는 Container 들이 전담


제어의 역전이란 객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것이다.


+) 스프링빈

스프링이 제어권을 가지고 직접 관계를 만들고 부여하는 오브젝트


참조

http://limmmee.tistory.com/13