현재 객체가 다른 객체를 참조하고 있다면 현재 객체는 다른 객체에 대해 의존성을 가짐.

 

Object Dependencies (객체 의존성)

public class PetOwner {
	private AnimalType animal;
    
    public PetOwner() {
    	this.animal = new Dog();
    }
}

PetOwner 객체는 AnimalType 객체(Dog)에 의존한다.

PetOwner 생성자에서 new Dog();를 통해 Dog에 의존성을 가짐

 

문제점

- PetOwner 객체는 AnimalType 객체의 생성을 제어하기 떄문에 두 객체 간에는 긴밀한 결합(tight coupling)이 생기고, tight coupling에 따라 AnimalType 객체를 변경하면 PetOwner객체도 변경됨.

- 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경되어야 한다

- 두 객체 사이의 의존성이 존재하면 Unit Test 작성이 어려워진다.

 

Dependency Injection (의존성 주입)

= IOC(Inversion of control) 제어의 역전

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

필요의 이유

  1. 의존성 파라미터를 생성자에 작성하지 않아도 되므로 보일러 플레이트 코드를 많이 줄일 수 있습니다. 보일러 플레이트 코드를 줄이는 것만으로도 유연한 프로그래밍이 가능합니다.
  2. Interface에 구현체를 쉽게 교체하면서 상황에 따라 적절한 행동을 정의할 수 있습니다. 이것은 특히 Mock 객체와 실제 객체를 바꿔가며 테스트 할 때 유용합니다.

+ Recent posts