IoC, Bean, DI

HeeSeong·2021년 1월 26일
0
post-thumbnail

① IoC (Inversion of Control) = 제어권의 역전

객체의 생성, 생명주기 관리 등 모든 객체에 대한 제어권이 바뀜을 의미.
컴포넌트 의존관계 결정, 설정 & 생명주기를 해결하기 위한 디자인 패턴

  • IoC 면? - new 를 써서 객체를 생성할 필요없다.

  • IoC 아니면? - new 를 써서 객체가 필요할때마다 생성.


② IoC 컨테이너

  • 객체에 대한 생성 및 생명주기를 관리 할수 있는 기능을 제공하고 있다.

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

  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
    (POJO : 주요 Java 오브젝트 모델, 컨벤션 또는 프레임워크를 따르지 않는 Java Object)

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


③ IoC의 분류

▷ DL (Dependency Lookup) = 의존성 검색

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

  • DL 사용 시 컨테이너 종속성이 증가한다.


▷ DI (Dependency Injection) = 의존성 주입

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

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

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

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


▷ DI의 장점

  • DL 사용시 컨테이너에 대한 종속성이 증가해, 주로 DI를 사용함.

  • 코드가 단순해진다.

  • 컴포넌트 간의 결합도가 제거된다.


④ DI 용어


▷ 빈 (Bean)

  • 스프링이 IoC 방식으로 관리하는 객체라는 뜻이다.

  • 스프링이 직접 생성과 제어를 담당하는 객체를 Bean이라고 한다.


▷ 빈 팩토리 (BeanFactory)

  • 스프링의 IoC를 담당하는 핵심 컨테이너를 가리킨다.

  • Bean을 등록, 생성, 조회, 반환 기능을 담당한다.


▷ 애플리케이션 컨텍스트 (ApplicationContext)

  • BeanFactory를 확장한 IoC 컨테이너

  • Bean을 등록하고 관리하는 기능은 BeanFactory와 동일

  • 단, 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.

  • ApplicationContext를 BeanFactory보다 더 많이 사용한다.


▷ 설정 메타정보 (Configuration metadata)

  • Applicationcontext또는 BeanFactory가 IoC를 적용하기 위해 사용하는 메타정보.

  • 설정 메타정보는 IoC컨테이너에 의해 관리되는 Bean객체를 생성하고 구성할 때 사용된다.

profile
끊임없이 성장하고 싶은 개발자

0개의 댓글