개발/Spring

[Spring] Ioc 컨테이너와 DI (Dependency Injection) - 1

hojak99 2017. 8. 18. 13:25

IoC (제어권의 역전) :

객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의마한다.

컴포넌트 의존관계 결정 (component dependency resolution), 설정(configuration) 및 생명주기 (lifecycle)를 해결하기 위한 디자인 패턴 (Design Pattern)



IoC가 아닌 경우에는 개발자가 객체를 신규 생성한다고 볼 수 있지만, IoC인 경우에는 프레임워크  컨테이너가 객체를 생성해 개발자의 코드에 주입시켜준다고 볼 수 있다.


이것이 바로 제어권의 역전인 Inversion of Control 이다.




IoC 컨테이너 :

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

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

- POJO(Plain Old Java Object)의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.

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




IoC는 크게 DL(Dependency Lookup) 과 DI(Dependency Injection)으로 나눌 수 있는데 DL은 EJB, Spring에서 제공하며 DI도 물론 Spring에서 지원하며 PicoContainer에서 지원한다.


또한, DI에는 Setter Injection 과 Constructor Injection, Method Injection으로 나눌 수 있다.



 DL (Dependency Lookup) 의존성 검색 

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

 DI (Dependency Injection) 의존성 주입

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


여기서 주의해야할 점은 DL 사용시 컨테이너가 제공하는 API를 사용하기 때문에 컨테이너 종속성이 증가하여, 주로 DI 를 사용한다는 점이다.

반응형