더북(TheBook)

3.3 스프링의 제어 역전

앞서 언급했듯이 제어 역전(Inversion of Control, IoC)은 스프링이 하는 일 중에서 큰 부분을 차지하며, 의존성 룩업 기능이 제공되기는 하지만 스프링 구현의 핵심은 의존성 주입입니다. 스프링은 의존 객체에 협력 객체를 자동으로 제공하기 위해 의존성 주입을 이용합니다. 스프링 기반의 애플리케이션에서도 의존 객체가 협력 객체를 룩업해 오는 것보다, 협력 객체를 의존 객체에 전달하는 의존성 주입을 사용하는 것이 항상 바람직합니다. 그림 3-3 스프링의 의존성 주입 메커니즘은 스프링의 의존성 주입 메커니즘을 보여줍니다. 의존성 주입은 협력 객체와 의존 객체를 서로 연결할 때 선호하는 메커니즘이지만, 의존 객체에 접근하려면 의존성 룩업이 필요합니다. 스프링은 다양한 환경에서 의존성 주입만으로 모든 애플리케이션 컴포넌트을 자동으로 연결할 수 없으며, 이런 경우에 의존성 룩업을 이용해 초기 컴포넌트에 접근해야 합니다. 예를 들어 독립형 자바 애플리케이션에서 스프링을 사용하도록 프로그래밍하려면 main() 메서드에서 스프링의 컨테이너를 부트스트랩하고 의존성을(ApplicationContext 인터페이스를 이용) 가져와야 합니다. 하지만 스프링의 MVC 기능을 사용해 웹 애플리케이션을 개발할 때는 스프링이 애플리케이션 전체를 자동으로 연결시키므로 의존성 룩업이 필요하지 않습니다. 스프링으로 의존성 주입을 할 수 있다면 그렇게 해야 합니다. 그렇지 않은 경우에는 의존성 룩업 기능을 사용하면 됩니다. 3장을 진행하는 과정에서 의존성 주입과 의존성 룩업을 사용하는 여러 예제를 살펴볼 것이며, 각 기능이 처음 등장할 때마다 자세히 알아보겠습니다.

▲ 그림 3-3 스프링의 의존성 주입 메커니즘

 

스프링 IoC 컨테이너의 흥미로운 특징 중 하나는 스프링 IoC 컨테이너가 자체 의존성 주입 컨테이너와 외부 의존성 룩업 컨테이너 사이의 어댑터 역할을 할 수 있다는 점입니다. 이 기능은 3장의 뒷부분에서 자세히 살펴봅니다.

스프링은 생성자 주입과 수정자 주입 방식 모두를 지원하며, 표준 IoC 기능들을 보완해 사용자 편의성을 높여주는 유용한 추가 기능을 제공합니다.

3장의 나머지 부분에서는 다양한 예제를 통해 스프링 DI 컨테이너의 기본에 대해 소개합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.