본문 바로가기

SpringFramework Core - I. IoC 컨테이너/1. 스프링 IoC 컨테이너와 Beans 소개

1. 스프링 IoC 컨테이너와 Beans 소개

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans

 

 

 이 챕터에서는 스프링 프레임워크가 어떻게 '제어 역전(Inversion of Control, IoC) 원칙'을 실현하는지 알아본다.

IoC는 '의존성 주입(dependency injection, DI)'으로도 알려져있다. IoC(DI)는 객체들이 자신들의 의존성(즉, 그들이 협력하는 다른 객체들)을 정의하는 과정이다. 그 과정은 '생성자 매개변수 방식', '팩토리 메서드 매개변수 방식', '이미 생성된 객체 또는 팩토리 메서드를 통해 반환받은 객체의 인스턴스에 프로퍼티로 세팅하는 방식'을 통해서만 이루어진다. 컨테이너는 그 후 bean을 만들면서 그 의존성들을 주입한다. Bean은 클래스의 즉시 생성이나 서비스 로케이터 패턴과 같은 메커니즘을 통해 인스턴스화와 의존성의 위치를 제어하기 때문에, 이 과정은 근본적으로 역전되어있는(Inversion of Control) 것이다. 

 

org.springframework.beans와 org.springframework.context 패키지는 스프링 IoC 컨테이너의 기반이 된다.

'BeanFactory' 인터페이스는 모든 타입의 객체를 관리할 수 있게 해주는, 더욱 진화된 설정 메커니즘을 제공한다.

'ApplicationContext'는 다음 항목들이 추가된 BeanFactory의 서브 인터페이스이다. 

  • 더 쉬운 스프링 AOP 기능들과의 통합
  • 국제화 메시지 자원들의 제어
  • 이벤트 발생
  • 웹 앱에서 사용가능한 WebApplicationContext과 같은, 응용 계층(Application-layer)에 특화된 contexts

 

요약하자면, BeanFactory는 설정 프레임워크와 기본적인 기능들을 제공한다. 그리고 ApplicationContext는 거기에 좀 더 기업 환경에 특화된 기능들을 더해준다. ApplicationContext는 BeanFactory의 완벽한 확대 집합이며, 이 챕터에서는 스프링 IoC 컨테이너로서 설명될 것이다. ApplicationContext 대신 BeanFactory를 쓰는 것에 대해 더 많은 것을 알고 싶다면 BeanFactory를 참고하라.

 

스프링에서는, 애플리케이션의 중추를 이루는 동시에 스프링 IoC 컨테이너에 의해 관리되는 객체들을 beans라고 부른다. bean은 인스턴스화되고 조립됐으며 스프링 IoC 컨테이너에 의해 관리를 받는 객체이다. 한편으로 bean은 단순히 애플리케이션의 수많은 객체 중 하나이기도 하다. bean들과 그들 사이의 의존성은 컨테이너가 사용하는 설정 메타데이터에 반영된다.