간단용어

IOC 컨테이너 와 DI ( Dependency Injection)

WOOKTAE 2021. 3. 3. 23:57

Spring Framework IOC 컨테이너와 DI ( Dependency Injection )

 

1. IOC ( Inversion of Control ) 의 이해

       1-1 IOC의 개념

  IOC ( 제어권의 역전 ) 이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.

 

 - 컴퓨넌트 의존관계 결정 ( Component dependency resolution ), 설정 ( configuration ) 및 생명주기 ( Lifecycle ) 를 해결하기 위한 디자인 패턴

 

       1-2 IOC 의 컨테이너 

        스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있음, 즉 IOC 컨테이너 기능을 제공한다.

 

 - IOC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.

 - POJO 의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.

 - 개발자들이 직접 POJO 를 생성할 수 있지만 컨테이너에게 맡긴다.

 

        1-3 IOC 의 분류

    DL ( Dependency Lookup )  과 DI ( Dependency Injection )

  - DL : 저장소에 저장되어 있는 Bean 에 접근하기 위해 컨테이너가 제공하는 API 를 이용하여 Bean 을  Lookup 하는 것

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

          1. Setter Injection

          2. Constructor Injection

          3. Method Injection

 

 

2. DI ( Dependency Injection )의 이해

     2-1 DI의 개념

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

 

    - 개발자들은 단지 빈 설정파일에 의존관계가 필요하다는 정보를 추가하면 된다.

    - 객체 래퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성된다.

    - 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것이다.

 

   DI 의 장점 

   

  - 코드가 단순해진다.

  - 컴퓨턴트 간의 결합도가 제거된다.

   

  2-2 DI 의 유형

  - Setter Injection ( Setter 메서드를 이용한 의존성 삽입 ) : 의존성을 입력 받는 setter 메서드를 만들고 이를 통해 의존성을 주입힌다.

 

  - Constructor Injection ( 생성자를 이용한 의존성 삽입 ) : 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입한다.

 

  - Method Injection ( 일반 메서드를 이용한 의존성 삽입 ) : 의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입한다.

   

 2-3 DI 를 이용한 클래스 호출방식

   - Hello 클래스 사용한다는 가정하에 구현 클래스의 상위 인터페이스를 사용하며 구현 클래스의 정보는 XML 에 기술. 그러면 Framework ( 컨테이너 ) 에서 설정파일을 읽은 후 구현객체를 생성하며 서로 의존관계가 있는지 확인하는 작업은 컨테이너에서 실행해줍니다.

 

 

3. Spring DI 컨테이너에 대한 이해 

 

Spring DI 컨테이너가 관리하는 객체를 빈 ( Bean ) 이라고 하고, 이 빈 ( Bean ) 들을 관리한다는 의미로 컨테이너를 빈 팩토리 ( Bean Factory ) 라고 부른다 .

   

  - 객체의 생성과 객체 사이의 런타임 ( Run - Time ) 관계를 DI 관점에서 볼 때는 컨테이너를 Bean Factory 라고 한다.

 

  - Bean Factory 에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스 ( Application Context ) 라고 부름 

 

3-2 BeanFactory 와 ApplicationContext 

   - BeanFactory 

        - Bean 을 등록, 생성, 조회, 반환 관리함

        - 보통은 BeanFactory 를 바로 사용하지 않고, 이를 확장한 ApplicationContext 를 사용함

        - getBean() 메서드가 정의되어 있음

 

   - ApplicationContext 

      - Bean 을 등록, 생성, 조회, 반환 관리하는 기능은 Bean Factory와 같음

      - Spring 의 각종 부가 서비스를 추가로 제공함

      - Spring 이 제공하는 Application Context 구현 클래스가 여러 가지 종류가 있음

      

 


 

1. IOC 컨테이너 :  Bean Factory 와 Application Context 

  • 스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립적인 컨테이너가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IOC 라고 부른다. 그래서 스프링 컨테이너를 IOC컨테이너라고 부른다.

'간단용어' 카테고리의 다른 글

String, String Builder, String Buffer  (0) 2021.03.07
Java 8 , Spring Framework 5.0  (0) 2021.03.04
Immutable Object (불변객체)  (0) 2021.02.28
REST ful  (0) 2021.02.28
REST API  (0) 2021.02.07