현재 객체가 다른 객체를 참조하고 있다면 현재 객체는 다른 객체에 대해 의존성을 가짐.
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) 제어의 역전
객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입
필요의 이유
- 의존성 파라미터를 생성자에 작성하지 않아도 되므로 보일러 플레이트 코드를 많이 줄일 수 있습니다. 보일러 플레이트 코드를 줄이는 것만으로도 유연한 프로그래밍이 가능합니다.
- Interface에 구현체를 쉽게 교체하면서 상황에 따라 적절한 행동을 정의할 수 있습니다. 이것은 특히 Mock 객체와 실제 객체를 바꿔가며 테스트 할 때 유용합니다.
'프로그래밍 > Java & JSP' 카테고리의 다른 글
Java Client http POST Multipart communication with php server (0) | 2020.04.10 |
---|