객체 간 의존관계가 있는 경우 객체 내부에서 의존관계를 관리하는 것이 아닌 외부에서 의존 객체를 주입하는 것을 의미한다.
// Service1 내부에 new 키워드를 사용해 의존성 생성
// 강한 결합을 통해 Repository에 변경에 Service1이 민감하다.
public class Service1 {
private Repository repo = new Repository();
}
// Service2 외부에서 Repository를 주입받아 의존관계 형성
// 내부에서 의존관계를 정의하지 않기 때문에 객체 간 결합도가 낮으며
// Repository의 변화에 대해 상대적으로 덜 민감하다.
public class Service2 {
private final Repository repo;
public Service2(Repository repo) {
this.repo = repo;
}
}
객체의 생명주기 권한 등의 제어를 개발자가 아닌 외부에 위임하는 것을 나타낸다.
대표적으로 프레임워크가 객체의 제어 권한을 가져간다.
스프링을 예시로 들면 Bean 컨테이너에 있는 객체에 한하여 의존성 주입, 생명주기 등을 관리한다.