최범균님의 스프링 프로그래밍 입문 이라는 책을 통해 공부한 부분을 블로그에 정리하고자 합니다. 잘못되거나 부족한 부분이 있으면 언제든 댓글로 가르침 부탁드립니다.
IoC 컨테이너라고도 부른다. 컨테이너의 기능은 객체의 생성 및 소멸 등 객체의 생명주기를 관리한다. 프레임워크의 핵심 개념인 컨테이너 개념은 객체의 생명주기 관리를 개발자가 아닌 프레임워크가 함을 의미하고 이는 곧 개발 주도권이 개발자가 아닌 프레임워크에 있기 때문에 IoC(Inversion Of Control : 제어의 역전) 라고 부른다.
컨테이너 설정(Application Context)은 자바나 xml 등 다양한 타입으로 설정 할 수 있다. Application Context는 클래스 계층도 최상위의 beanFactory 인터페이스에서 bean 객체의 생성, 소멸 등 생명주기 관리 기능을 정의하고 있고 그 하위 클래스 중 ApplicationContext 인터페이스에서 bean 생명주기 기능을 포함한 메시지, 환경 변수 등을 처리하는 기능을 정의한다. 이 두 인터페이스의 차이점은 여러개가 있지만 가장 큰 차이점은 객체 생성 방식이다. beanFactory는 lazy loading으로, 객체 호출 시점에 그 객체를 생성한다. ApplicationContext는 pre loading으로, 컨테이서 생성 시점에 그 안에 설정된 모든 객체를 생성한다.
클래스의 객체를 하나만 생성하는 디자인 패턴을 싱글턴 패턴이라고 하는데, 컨테이너는 싱글턴 패턴을 따른다. (물론 변경 가능하다.) 즉, 단일 bean 객체를 생성하여 객체 호출시마다 같은 객체를 주입한다.