더북(TheBook)

1.1.2 제어 역전과 의존성 주입

스프링 프레임워크의 코어는 제어 역전(Inversion of Control, IoC) 원칙에 기반을 두고 있습니다. IoC는 컴포넌트 간의 의존성 생성과 관리를 외부에서 수행하는 기법입니다. 예를 들어 Foo 클래스가 Bar 클래스의 인스턴스에 의존해 특정 작업을 수행한다고 가정해 봅시다. 전통적인 방법으로 Foonew 연산자를 사용해 Bar의 인스턴스를 생성하거나 팩터리 클래스를 통해 인스턴스를 생성합니다. 그에 비해 IoC 접근 방식을 사용하면 런타임에 외부 프로세스에 의해 Bar 인스턴스(또는 하위 클래스)가 Foo에게 제공됩니다. 런타임에 의존성을 주입하는 이러한 동작은 나중에 마틴 파울러(Martin Fowler)에 의해 훨씬 더 서술적인 의존성 주입(Dependency Injection, DI)이라는 용어로 불리게 됐습니다. 3장에서는 DI를 사용하는 의존성 관리에 대한 특성을 설명합니다.

Note 3장에서 보겠지만, 제어 역전(inversion of control, IoC)이 항상 의존성 주입(Dependency Injection, DI)을 의미하는 것은 아닙니다. 하지만 스프링에서는 두 용어를 혼용해서 사용하더라도 큰 의미의 차이는 없습니다.

 

스프링의 DI 구현체는 자바빈(JavaBeans)과 인터페이스(Interface)의 두 가지 핵심적인 자바 개념을 기반으로 합니다. 스프링을 DI 제공자로 사용하면 XML 파일, 자바 구성 클래스, 코드 내의 애너테이션, 새로운 그루비 빈 정의 메서드와 같은 다양한 방식으로 애플리케이션의 의존성 구성을 유연하게 정의할 수 있습니다. 자바빈(POJO)은 생성자나 수정자(setter) 메서드의 사용처럼 다양한 방식으로 설정할 수 있는 자바 리소스 생성 표준 메커니즘을 제공합니다. 3장에서는 스프링이 어떻게 자바빈 사양을 사용해 DI 구성 모델의 코어를 형성하는지 살펴봅니다. 사실 스프링이 관리하는 모든 리소스를 빈(bean)이라고 부릅니다. 자바빈에 익숙하지 않은 독자라면 3장의 앞부분에 있는 설명을 먼저 살펴보기 바랍니다.

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