Search
Duplicate
🎗️

IoC, IoC Container

개념

제어의 역전이란 기존 객체의 생성, 생명주기의 관리 등의 작업들에 대한 제어권이 코드에서 다른 곳으로 옮겨간 것이다.
컴포넌트 의존관계, 설정 및 생명주기를 해결하기 위한 디자인 패턴이다.

IoC의 분류

의존성 주입과 의존성 검색이 존재한다.
Dependency Lookup
저장소에 존재하는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 탐색하는 것이다.
Dependency Injection
각 클래스 간의 의존관계를 빈 정의 정보를 바탕으로 컨테이너가 주입해주는 것이다.
의존성 검색을 사용하는 경우, 컨테이너에 대한 의존성이 증가하기 때문에 주로 DI를 사용한다.

IoC 컨테이너 설정 종류

XML 설정 파일(legacy)
Java 어노테이션
Java 소스코드

상세

스프링 어플리케이션에서는 객체의 생성과 관계 설정, 사용, 제거 등의 작업을 코드 대신 독립된 컨테이너가 담당한다.
이를 컨테이너가 코드 대신 객체에 대한 제어권을 가지고 있다고 해서 IoC라고 부른다. 그래서 스프링 컨테이너를 IoC 컨테이너라고도 한다.
스프링에선 IoC를 담당하는 컨테이너를 Bean Factory 또는 Application Context라고 부르기도 한다.
객체의 생성과 객체 간의 관계를 설정하는 DI 관점에서는 컨테이너를 Bean Factory라고 한다.
외에도 엔터프라이즈 어플리케이션을 개발하는 데 필요한 여러 컨테이너 기능을 추가한 것을 Application Context라고 한다.
스프링의 IoC 컨테이너라하면 일반적으로 Applicaiotn Context를 의미한다.
스프링의 Bean FactoryApplication Context는 각각 BeanFactoryApplicatoinContext 인터페이스로 정의되어 있으며 ApplicationContextBeanFcaotry 인터페이스를 상속한 서브 인터페이스다.
public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver{};
실제로 스프링 컨테이너 또는 IoC 컨테이너는 ApplicationContext 인터페이스 구상 클래스의 객체다.