본문 바로가기

SpringFramework Core - I. IoC 컨테이너/4. 의존성

4.1. 의존성 주입

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-collaborators

 

 

의존성 주입(DI)은 객체들의 그들의 의존성을 정의하는 과정을 말한다. 그 과정은 '생성자 변수 방식', '팩토리 메서드 변수 방식', '이미 생성된 객체 또는 팩토리 메서드를 통해 반환받은 객체의 인스턴스에 프로퍼티를 세팅하는 방식'을 통해서만 이루어진다. 컨테이너는 그 후 bean을 만들면서 그 의존성들을 주입한다. bean은 클래스의 즉시 생성이나 서비스 로케이터 패턴과 같은 메커니즘을 통해 인스턴스화와 의존성의 위치를 제어하기 때문에, 이 과정은 근본적으로 역전되어있는(Inversion of Control) 것이다. 

 

의존성 주입 원칙 하에서 코드는 더 깔끔하고 결합도를 낮추는 것은 더 효과적이다. 객체는 스스로의 의존성을 찾지도 않고 의존성의 위치나 클래스에 대해서도 알지 못한다. 결과적으로 클래스는 테스트가 더 수월해진다. 특히 의존성이 인터페이스나 추상클래스에 있다면 더 테스트가 쉽다. 이때는 단위 테스트에 stub이나 mock 구현체를 사용할 수 있게 된다.

 

의존성 주입은 크게 두 가지의 변형된 형태를 갖는다. 하나는 '생성자 기반의 의존성 주입'이고 다른 하나는 'setter 기반의 의존성 주입'이다.