Skip to content

Latest commit

 

History

History
26 lines (15 loc) · 1.99 KB

File metadata and controls

26 lines (15 loc) · 1.99 KB

DI(Dependency Injection)

의존하고 있다는 건 무슨 의미일까?

A -> B가 있을 때, 의존한다는 건 B가 변하면 그것이 A에 영향을 미친다는 것을 의미합니다. B의 기능이 추가, 변경되거나 형식이 바뀌면 그 영향이 A로 전달되다는 것입니다.

이때 의존관계에는 방향성이 있습니다. A는 B에 의존하지만, B는 A에 의존하지 않습니다. 따라서 A의 변경은 B에 영향을 주지 않습니다.

DI = 의존관계 주입

DI는 다음의 세가지 조건을 충족하는 작업을 말합니다.

  • 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야 한다.
  • 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
  • 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입)해줌으로써 만들어진다.

DI는 자신이 사용할 객체에 대한 선택과 생성 제어권을 외부로 넘기고 자신은 수동적으로 주입받은 객체를 사용한다는 점에서 IoC의 개념에 잘 들어맞습니다. 스프링 컨테이너의 IoC는 주로 의존관계 주입 또는 DI라는 데 초점이 맞춰져 있습니다. 그래서 스프링을 IoC 컨테이너 외에도 DI 컨테이너, DI 프레임워크라고 부르기도 합니다.

DI를 원하는 객체는 먼저 자기 자신이 컨테이너가 관리하는 빈이 돼야 한다는 점을 주의해야 합니다.

DI의 장점

DI를 이용하면 코드에는 런타임 클래스에 대한 의존관계가 나타나지 않고, 인터페이스를 통해 결합도가 낮은 코드를 만들므로, 다른 책임을 가진 사용 의존관계에 있는 대상이 바뀌거나 변경되더라도 자신은 영향을 받지 않으며, 변경을 통한 다양한 확장 방법에는 자유롭다는 장점을 가집니다.

참고 자료

  • 토비의 스프링 3.1 Vol.1