반응형

[광고 누르면 오늘의 행운 상승!!]

DI (Dependency Injection)

객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시키는 것

Object Dependencies(객체 의존성)

현재 객체가 다른 객체와 상호작용(참조)하고 있다면 현재 객체는 다른 객체에 의존성을 가진다.

public class Pet{ 
  private Animal animal;
    public Pet() {
    this.animal = new Dog(); 
    } 
}
  • Pet객체는 Animal 객체(Dog)에 의존한다.
  • Pet 생성자에서 new Dog();를 통해 Dog에 의존성을 가진다.
  • 이 접근법의 문제점(의존성이 위험한 이유)
  • Pet 객체는 Animal 객체의 생성을 제어하기 때문에 두 객체 간에는 긴밀한 결합(tight coupling)이 생기고, tight coupling에 따라 Animal 객체를 변경하면 Pet객체도 변경된다.
  • 즉, 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경 되어야 한다.
  • 또한 두 객체 사이의 의존성이 존재하면 Unit Test 작성이 어려워 진다.

Dependency Injection(의존성 주입)

객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴

  • Framework에 의해 동적으로 주입되므로 여러 객체 간의 결합이 줄어든다.
  • Dependency Injection은 Spring Framework에서 지원하는 IoC의 형태
  • Dependency Injection(의존성 주입)과 Inversion Of Control(제어의 역전)은 같은 의미로 사용된다.
  • IoC는 DI를 통해 달성된다.

IoC(제어의 역전)

  • 프로그램 제어권을 framework가 가져가는 것
  • 개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 framework가 한다.
  • 개발자가 설정(xml, annotation 등)만 하면 Container가 알아서 처리한다. 즉, 우리는 Framework 속에서 프로그래밍을 하는 것.
반응형

+ Recent posts