IoC와 컨테이너

mangez_js·2024년 11월 27일

Study

목록 보기
13/47

IoC란?

IoC(Inversion of Control, 제어의 역전)는 객체의 생성, 관리, 의존 관계 설정을 개발자가 직접 수행하는 대신, 프레임워크(스프링 컨테이너)가 대신 수행하도록 제어권을 넘기는 설계 원칙입니다.

IoC의 장점

  • IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리해준다.
    ∘ 때문에 개발자는 비즈니스 로직에 집중할 수 있다.
  • 또한 POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
    ∘ 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
    ∘ 객체 생성코드가 없으므로 TDD가 용이하다.

IoC 컨테이너

컨테이너는 보통 객체의 생명주기를 관리하고 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것

  • 스프링 프레임워크도 객체를 생성하고 관리하고 책임지며 의존성을 관리해주는 컨테이너가 있는데 그것이 IoC컨테이너(=스프링 컨테이너)이다.

스프링 컨테이너란?

IoC 원칙을 구현한 도구로, 애플리케이션에서 필요한 객체(빈, Bean)를 생성, 초기화, 의존성 주입, 소멸 등의 생명주기를 관리합니다.

역할

  1. 객체 등록
  • 개발자가 정의한 객체를 빈(bean)으로 등록.
  • @Componenet, @Configuration 등으로 지정된 객체를 스캔하여 관리.
  1. 의존성 주입(Dependency Injection, DI)
  • 빈 간의 의존 관계를 자동으로 연결.
  1. 빈의 생명주기 관리
  • 빈의 생성 -> 초기화 -> 사용 -> 소멸까지 전 과정 관리.
  1. 객체 제공
  • 필요 시 컨테이너에서 빈을 가져와 사용

종류

  1. BeanFactory
  • 가장 기본적인 IoC 컨테이너
  • 스프링 컨테이너의 최상위 인터페이스이다.
  • Bean을 등록, 생성, 조회, 반환 관리를 한다.
  • 팩토리 디자인 패텬을 구현한 것으로는 BeanFactory는 Bean을 생성하고 분배하는 책임을 지는 클래스이다.
    ∘ BeanFactory 계열의 인터페이스만 구현한 클래스는 단순히 컨테이너에서 객체를 생성하고 DI를 처리하는 기능만 제공한다.
  • 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.
  1. ApplicationContext
  • BeanFactory를 확장한 컨테이너
  • BeanFactory를 상속한 인터페이스로 BeanFactory의 기능 외에 추가적으로 AOP와 같이 대규모 웹 프로젝트에 필요한 여러 확장기능들을 포함하고 있다.
  • 스프링의 각종 부가 기능을 추가로 제공해준다.
  • BeanFactory 보다 추가적으로 제공하는 기능
    ∘ 국제화가 지원되는 텍스트 메시지를 관리해준다.
    ∘ 이미지 같은 파일 자원을 로드할 수 있는 포괄적인 방법을 제공해준다.
    ∘ listener로 등록된 Bean에게 이벤트 발생을 알려준다.
  • 따라서 대부분의 어플리케이션에서는 BeanFactory보다는 ApplicationContext를 사용하는 것이 더 좋다.

0개의 댓글