의존 관계에서 구체적인 모듈을 참조해서는 안되지만 이는 사실상 불가능하다. 자바의 String 클래스가 대표적인 예인데, String 클래스는 구체 클래스이나 대부분의 모듈에서 이에 의존한다. 따라서 우리가 의존하는 것을 피해야 할 것은 변동성이 큰 구체적인 요소이다.
안정된 추상화
인터페이스를 최대한 변경하지 않고 새로운 기능을 추가할 수 있는 방법을 가장 먼저 찾아라. 변동성이 큰 구현체에 의존하는 것을 최대한 피하고 안정된 추상 인터페이스를 의존해야 한다.
- 변동성이 큰 구체 클래스를 참조하지 말라
- 추상 팩토리 사용을 고려하라
- 변동성이 큰 구체 클래스로부터 파생하지 말라
- 상속은 가장 강력한 결합이다
- 구체 함수를 오버라이드 하지 말라
- 구체적이며 변동성이 크다면 절대로 그 이름을 언급하지 말라
팩토리
소스 코드의 구성도를 그려볼 때 모든 화살표의 방향은 구체적이지 않은(추상적인) 컴포넌트로 향하는 것이 이상적이다.