Spring/이론

IoC 컨테이너 : 스프링 IoC 컨테이너와 빈

Dev-SeeOne 2020. 8. 11. 18:42

스프링 IoC 컨테이너와 빈

IoC (Inversion of Control) : 의존 관계 주입 (DI, Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입받아 사용하는 방법

스프링 IoC 컨테이너

  • IoC 기능을 제공하며, 빈들을 담고 있기 때문에 컨테이너라고 불린다.
  • BeanFactory : 스프링 IoC 컨테이너의 가장 최상위 인터페이스 (가장 핵심이 되는 클래스)
  • 빈 설정 소스로 부터 빈 정의를 읽어들이고, 빈을 구성하고 제공한다.

초기에는 xml 기반의 IoC를 제공했지만 점차 Annotation 기반의 IoC를 제공하게 바뀌었다. ex) @Service, @Repositroy ...

빈 (Bean)

  • 스프링 IoC 컨테이너 안에 들은 객체를 의미한다. 즉, 스프링 IoC 컨테이너에 의해 관리되는 객체
  • 일반적인 클래스들은 빈이 아니며 @Repository 등과 같이 Annotation이 붙은 것들이 Auto Scan에 의해 빈으로 자동 등록된다.
  • 빈으로 등록할 경우 장점
    • 의존성 관리 : 의존성 주입을 하기 위해서는 빈으로 등록되어 있어야 한다.
    • 스코프 : 싱글톤으로 만들어 관리하기 위해, 기본적으로 빈들은 싱글톤으로 생성된다.
    • 여러가지 라이프사이클 인터페이스를 지원한다.

싱글톤을 사용할 때 얻을 수 있는 이점

  • 메모리 면에서 효율적
  • 런타임시 성능 최적화에 유리하다 : @Repository 와 같이 DB와 일을 하는 객체는 생성 비용이 비싸므로 싱글톤으로 생성하는 것이 효율적이다.

ApplicationContext

  • 실제로 가장 많이 사용하게 될 BeanFactory
  • IoC 컨테이너의 기능 + 추가적인 기능들을 제공
    • BeanFactory
    • 메세지 소스 처리 기능(i18n)
    • 이벤트 발행 기능
    • 리소스 로딩 기능