의존 관계 역전 원칙 (Dependency Inversion Priciple; DIP)

A. 고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야한다.

B. 추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다.

쉽게 말하자면, '자주 변경되는 구체 클래스(concrete class)에 의존하지 마라'. 만약 어떤 클래스에서 상속받아야 한다면, 기반 클래스를 추상 클래스로 만들어라.

어떤 클래스의 참조(reference)룰 가져야 한다면, 참조 대상이 되는 클래스를 추상 클래스로 만들어라. 만약 어떤 함수를 호출해야 한다면, 호출되는 함수를 추상 함수로 만들어라.

우리가 의존하면 안되는 것은 '자주 변경되는' 구체 클래스다. 활발히 개발 중인 구체 클래스나 변경의 여지가 높은 비즈니스 규칙을 담을 클래스가 여기에 속한다.

UML을 사용하면 이 원칙을 지키는지 매우 쉽게 검사할수 있다.

만약 그렇다면 그 시스템은 변경에 민감하게 되어버릴 것이다.