[스프링 공부] 스프링 IoC 컨테이너

자바 애플리케이션은 애플리케이션의 행동 방식을 제공하기 위해 상호작용 하는 객체로 이뤄진다.

객체가 다른 객체와 상호 작용하는 경우를 객체의 의존관계라고 한다. DI는 객체 간의 의존 관계를 생성자 인수(Constructo argument) 나 셰터 메서드 인수( Setter method arguements)로 명시하고 객체를 생성할 때 생성자나 세터를 통해 의존 관계를 주입하는 디자인 패턴.

 

스프링 IoC 컨테이너는 스프링 애플리케이션에서 애플리케이션에 존재하는 객체를 생성하고 의존 관계를 주입하는 일을 담당한다. 스프링 컨테이너가 생성하고 관리하는 애플리케이션 객체들을 빈(Bean) 이라고 부른다. 스프링 컨테이너는 애플리케이션 객체를 한꺼번에 책임지므로, 팩토리나 서비스 로케이터 등의 디자인 패턴을 직접 구현할 필요가 없다. 의존 관계를 만들고 주입하는 책임은 애플리케이션 객체가 아닌 스프링 컨테이너에 있어 DI를 제어의 역전 (IoC)이라고도 부른다. 

 

스프링 기반 애플리케이션에서 애플리케이션 객체와 그들의 의존 관계의 정보는 설정 메타데이터를 사용해 지정한다. 스프링 IoC 컨테이너는 애플리케이션의 설정 메타데이터를 읽어서 애플리케이션 객체들과 그들의 의존관계를 인스턴스화 한다. 스프링 컨테이너에 설정 메타데이터를 제공할 때는 XML, 자바 에너테이션, 자바 코드 등의 방식을 사용할 수 있다. 

 

스프링 컨테이너가 애플리케이션 객체를 생성하고 관리하므로 스프링 컨테이너를 통해 엔터프라이즈 서비스(트랜잭션, 보안, 원격접근 등)을 투명하게 객체에 적용할 수 있다. 이런 식으로 스프링 컨테이너가 애플리케이션 객체에 추가 기능을 부여하고 객체를 평범한 자바 객체(기존 자바 객체 POJO)로 모델링 할 수 있다.

 

POJO 클래스는 프레임워크가 지정하는 인터페이스나 클래스를 구현 및 확장하지 않는 보통 자바클래스에 지나지 않음. 애플리케이션에 필요한 엔터프라이즈 서비스는 스프링 컨테이너로 투명성 있게 POJO에 제공됨.

 

배워서 바로 쓰는 스프링 프레임워크 P35