객체의 생성, 생명주기 관리 등 모든 객체에 대한 제어권이 바뀜을 의미.
컴포넌트 의존관계 결정, 설정 & 생명주기를 해결하기 위한 디자인 패턴
IoC 면? - new 를 써서 객체를 생성할 필요없다.
IoC 아니면? - new 를 써서 객체가 필요할때마다 생성.
객체에 대한 생성 및 생명주기를 관리 할수 있는 기능을 제공하고 있다.
IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
(POJO : 주요 Java 오브젝트 모델, 컨벤션 또는 프레임워크를 따르지 않는 Java Object)
개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
▷ DL (Dependency Lookup) = 의존성 검색
저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup(조회) 하는 것.
DL 사용 시 컨테이너 종속성이 증가한다.
▷ DI (Dependency Injection) = 의존성 주입
각 클래스 간의 의존관계를 Bean 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것.
개발자들은 단지 Bean 설정파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
객체 레퍼런스를 컨테이너로부터 주입 받아서 실행 시에 동적으로 의존관계가 생성된다.
컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것이다.
▷ DI의 장점
DL 사용시 컨테이너에 대한 종속성이 증가해, 주로 DI를 사용함.
코드가 단순해진다.
컴포넌트 간의 결합도가 제거된다.
▷ 빈 (Bean)
스프링이 IoC 방식으로 관리하는 객체라는 뜻이다.
스프링이 직접 생성과 제어를 담당하는 객체를 Bean이라고 한다.
▷ 빈 팩토리 (BeanFactory)
스프링의 IoC를 담당하는 핵심 컨테이너를 가리킨다.
Bean을 등록, 생성, 조회, 반환 기능을 담당한다.
▷ 애플리케이션 컨텍스트 (ApplicationContext)
BeanFactory를 확장한 IoC 컨테이너
Bean을 등록하고 관리하는 기능은 BeanFactory와 동일
단, 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.
ApplicationContext를 BeanFactory보다 더 많이 사용한다.
▷ 설정 메타정보 (Configuration metadata)
Applicationcontext또는 BeanFactory가 IoC를 적용하기 위해 사용하는 메타정보.
설정 메타정보는 IoC컨테이너에 의해 관리되는 Bean객체를 생성하고 구성할 때 사용된다.