2015년 1월 11일 일요일

[Spring Framework] IoC에 대해서 그리고 ApplicationContext

IoC

이름부터 생소한 IoC 한번 알아보도록 하자.

1. IoC 란?

IoC(Inversion of COntrol)를 풀이하면 제어의 반전..(뭔소린지..뭔 반전이여..)

누군가가 제어를 대신해준다는 의미 정도로 해석이 가능할 것 같음.

IoC 개념은 스프링에서 처음 등장한 것이 아니라 서블릿 컨테이너와 EJB 컨테이너에서
이미 사용하고 있는 개념이다. 단지 지금까지 제대로 알지 못했을 뿐...

IoC 컨테이너 개념이 최근에 이슈처럼 등장하고 있는 이유는 그 동안 서블릿과 EJB 컨테이너가 가지고 있던 제약사항을 극복하고 새로운 대안의 IoC 컨테이너를 제공하자는 것이다.

2. 사용하는 목적

IoC를 사용하는 목적에 대해서는 지금까지의 클래스 호출 방식의 변화를 살펴볼 필요가
있을 것 같다. 


3. Spring 컨테이너의 IoC 

DL(Dependency Lookup) - 의존성 검색
  
    - 저장소에 저장되어 있는 Bean에 접근하기 위하여 개발자들이 컨테이너에서 제공하는
       API를 이용하여 사용하고자 하는 빈(Bean)을 Look up 하는 것

DI (Dependency Injection) - 의존성 주입

    - 각 계층 사이, 각 클래스 사이에 필요로 하는 의존 관계를 컨테이너가 자동으로
       연결해주는 것 

    - 각 클래스 사이의 의존 관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가
       자동으로 연결해주는 것

4. ApplicationContext

   Object 생성을 책임지는 DAOFactory에 대응하는 것이 ApplicationContenxt 이다.
Spring에선 이 ApplicationContext를 IoC 컨테이너라 하기도 하고, Spring컨테이너라고
부르기도 한다. 또는 Bean Factory 라고하기도 한다.

ApplicatoinContext에는 DaoFactory 클래스와는 달리 직접 Object를 생성하고 그 관계를
맺어주는 코드는 없고, 그런 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻는다.

5. ApplicationContext가 Bean을 가져오는 동작방식
  
 1. ApplicationContext는 앞의 @Configure 가 붙은 DaoFactory 클래스를 설정정보로
등록해두고 @Bean 이 붙은 메소드의 이름을 가져와 Bean 목록을 만든다.

2. 클라이언트가 ApplicationContenxt의 getBean 메소드를 호출하면 Bean 목록에서 요청한 이름이 있는지 찾는다.

3. 있다면 Bean을 생성하는 메소드를 호출해서 오브젝트를 생성시킨 후 클라이언트에게
리턴해준다. 


댓글 없음:

댓글 쓰기