티스토리 뷰

컨테이너(Container)

 


- 컨테이너는 인스턴스의 생명주기관리한다.
- 생성된 인스턴스들에게 추가적인 기능을 제공하는 역할도 하고 있다.
- Servlet 공부했을때 Servlet클래스를 정의하긴 했지만 실제 인스턴스화 하는 과정을하지는 않고 tomcat이 이를 대신했다.
즉, WAS는 Servlet 컨테이너를 가지고 있다는 뜻, 실제로 서블릿클래스를 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 서블릿 컨테이너가 하는 것 이다.
- 즉, 컨테이너는 프로그래머가 작성한 코드를 처리하는 독립적인 존재이며, 프로그래머가 정한 설정을 바탕으로 객체의 생성과 소멸을 제어한다.

 

 

IOC(Inversion of Control)

- '제어의 역전'이라고도 불린다.

- 개발자가 코드를 작성하고 이 코드에 대한 흐름제어개발자가 하는 것이 아닌, 다른 프로그램이 하는 것을 IOC(Inversion Of Control) 이라고 부른다.

- 즉 역전(Inversion)이란, 객체 생성부터 라이프 사이클 제어 관리의 주체가 개발자가 아닌 다른 프로그램으로 역전(Inversion)된 것을 의미한다.

 

DI(Dependency Injection)

- 여기서 의존성객체간의 의존관계를 의미한다. 예를 들어, 자동차 객체에는 엔진이라는 객체가 있어야하는 것과 같은 의존관계.

- DI객체간의 의존관계외부 빈 설정을 바탕으로 컨테이너가 자동으로 연결해주는 것.

 

ex)

*DI 적용안된 예

class 엔진 {

}

class 자동차 {

엔진 v5 = new 엔진();     //개발자가 직접 인스턴스를 생성한다.

}

 

*DI 적용된 예

class 엔진{

}

class 자동차 {

@Autowired

엔진 v5;

}

 

Spring에서 제공하는 IOC/DI 컨테이너


BeanFactory : IoC/DI에 대한 기본 기능을 가지고 있다.
ApplicationContext : BeanFactory의 모든 기능을 포함하며, 일반적으로 BeanFactory보다 추천된다. 트랜잭션처리, AOP등에 대한 처리를 할 수 있다. BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고, 국제화 처리, 어플리케이션 이벤트 등을 처리할 수 있다.
BeanPostProcessor : 컨테이너의 기본로직을 오버라이딩하여 인스턴스화 와 의존성 처리 로직 등을 개발자가 원하는 대로 구현 할 수 있도록 한다.
BeanFactoryPostProcessor : 설정된 메타 데이터를 커스터마이징 할 수 있다.

 

참고 사이트 : http://www.edwith.org/



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

댓글