class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
->직접 의존성을 만들어서 사용하며 의존성의 제어는 해당 클래스에 있음
제어의 역전
직접 의존성을 생성하지 않고 주입받음.
class OwnerController {
private OwnerRepository repo;
// 객체를 사용하는 생성자에서 parameter 로 Repository 를 받는다.
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
}
// Test Class 에서의 사용 예시
class OwnerControllerTest {
@Test
public void create() {
// 생성된 객체를 parameter 로 넘겨준다.
// 해당 repository 를 사용하는 OwnerController 가 직접 Repository 객체를 생성해서 사용하지 않는다.
OwnerRepository repo = new OwnerRepository();
OwnerController controller = new OwnerController(repo);
}
}
객체를 사용하는 class 내부의 생성자에서 해당 객체를 생성하지 않고 주입받아 사용한다.
이것을 DI(Dependency Injection) 이라고 한다. (의존성 주입)
객체지향적으로 Single Responsibility Principle을 지킬 수 있게 됨
의존관계를 선택하는 책임에서 벗어나 다른 클래스가 수정되어도 해당 클래스에는 영향이 없음