Definition
•
상위 수준의 모듈이 하위 수준의 모듈에 의존하지 말도록, 이들 두 모듈 모두 추상화에 의존하도록
•
추상화는 구체적이 사항에 의존하지 않도록
•
inversion이란 어휘는 구조적 분석 설계 등의 전통적 방법에서 정책이 구체적인 것에 의존하는 경향이 있어, 이들 의존 관계를 역전(inversion) 시킨다는 뜻
•
상위수준 모듈이란 : 의미론 상 타 모듈의 action에 정책을 제공하는 모듈로서, 해당 프로그램의 핵심을 이루는 모듈. 일반적으로 하위 수준 모듈에 비해 변화 정도가 적음.
DIP violated sample
•
Utility -> Mechanism -> Policy 방향으로 수준이 높아짐에도 불구하고, 하위 수준의 모듈 방향으로 dependency가 걸리고 있음.
•
게다가 의존성은 이행성(transitivity)를 띄므로, policy 계층은 mechanism 뿐 아니라 utility 계층에도 의존성을 가짐.
DIP complied sample
•
상위 수준 모듈은 자신이 필요한 하위 수준 서비스에 대한 정의(추상물)을 그 자신의 계층에 정의하고, 해당 정의를 참조(의존성의 제거)
•
하위 수준 모듈은 상위 수준 계층에 정의된 서비스를 상속을 통해 구현물을 제공(상위 수준의 추상물에 대한 상속을 통한 의존성의 역전)
Conclusion
•
Framework design에서 본 원칙의 적절한 응용이 필수 : DI(Dependency Injection; 의존성이 해당 클래스가 인스턴스화된 이후에야 걸림)
•
TDD를 이루기에 매우 용이. Ex. Policy layer는 타 layer의 도움 없이도 인스턴스화가 가능.