OrderServiceImpl
은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다.AppConfig
가 가지고 있다.OrderServiceImpl
도 AppConfig
가 생성하며 이 뿐만 아니라 OrderService
인터페이스의 다른 구현 객체를 생성하고 실행할 수 있다.OrderServiceImpl
은 묵묵히 자신의 로직을 실행할 뿐이다.이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라고 한다.
OrderServiceImpl
은 DiscountPolicy
인터페이스에 의존한다.<클래스 다이어그램>
OrderServiceImpl
은 MemberRepository
, DiscountPolicy
에 의존한다는 것을 알 수 있다.OrderServiceImpl
에 주입될 지 않 수 없다.
- 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
- 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다.