객체 사이에 서로 도움을 주고받으면 의존 관계가 발생한다.
의존 역전 원칙은 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하지 말라는 원칙이다.
변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙이다.
다음은 예시다.
로봇 장난감을 가지고 노는 경우, 실제 가지고 노는 구체적인 장난감(로봇, 자동차, 레고)은 변하기 쉬운 것이다.
구체적인 장난감은 변하지만 아이가 장난감을 가지고 노는 사실은 변하기 어려운 것이다.
객체지향 관점에서는 변하기 어려운 추상적인 것들을 표현하는 수단으로 추상 클래스와 인터페이스가 있다.
DIP를 만족하려면 어떤 클래스가 도움을 받을 때 구체적인 클래스보다는 인터페이스나 추상 클래스와 의존 관계를 맺도록 설계해야 한다.
DIP를 만족하면 의존성 주입(DI)이라는 기술로 변화를 쉽게 수용할 수 있는 코드를 작성할 수 있다.
의존성 주입을 이용하면 대상 객체를 변경하지 않고도 외부에서 대상 객체의 외부 의존 객체를 바꿀 수 있다.