Spring | Dependency Injection(DI)와 Bean | DI는 "의존성"을 분리

DI ( Dependency Injection, 의존성 주입) 란?

Spring Framework는 “DI 컨테이너 ‘라는 프레임워크로 시작했었다. DI는 “의존성 주입"이라는 기능이다.

프로그램은 다양한 기능을 컴포넌트화하여 이용하는 경우가 많다. 구성 요소에 각종 속성 등을 설정하여 이용하는 것이다. 이 때, 세세한 설정을 모두 코드로 작성하여 두면, 추후 변경이나 테스트 등이 매우 복잡하게 된다.

이 구성 요소의 설정 등과 같이 특정 상황 등으로 구성되는 것을 ‘의존성’이라고 한다. 이 의존성이 있기 때문에 코드가 특정 상황에서만 사용할 수 형태가 되어 버린 것이다.

따라서 구성 요소의 설정 정보 등의 의존성을 코드에서 분리하고 외부에서 주입하도록 하자는 것이 “의존성 주입"의 기본적인 생각이다. 이것은 몇 가지 방법이 있는데, 기본은 “Bean 및 설정 파일"로 프로그램을 만들 것이라고 생각하면 이해하기 쉬울 것이다.

Bean은 다양한 값 등을 속성으로 가지고 있는 간단한 클래스이다. 일반적으로 Bean 인스턴스를 생성하여 각종 속성 등을 설정하여 사용한다. 여기서 이 설정 처리 (의존성 부분)을 코드에서 분리 될 수 있다면 코드도 심플해 지고 테스트도 쉽고 될 것이다.

Spring Framework는 의존성 부분을 XML 파일에 기술해서 작성해서 준비하고 이를 가져 와서 자동으로 Bean 인스턴스를 생성 할 수 있다. 그 밖에도 어노테이션을 이용하는 방법도 있다만, Bean 설정 파일을 이용하는 방법이 가장 기본적 것으로 기억해 두자.

생성자를 이용한 의존성 삽입 (Constructor Injection)

  • 생성자를 이용한 클래스 사이의 의존 관계를 연결
  • Spring 프레임워커의 빈 설정 파일에서 constructor-arg 사용

setter() 메소드를 이용한 의존성 삽입 (Setter Injection : type 2 IoC)

  • Spring 프레임워커의 빈 설정 파일에서 property 사용