유연성이 극대화된 시스템이란 소스 코드 의존성이 추상에 의존하며 구체에는 의존하지 않는 시스템
자바와 같은 정적 타입 언어에서 이 말은 use, import, include 구문은 오직 인터페이스나 추상 클래스 같은 추상적인 선언만을 참조해야 한다는 것
→ 구체적인 대상에는 절대로 의존해서는 안 된다
루비나 파이썬과 같은 동적 타입 언어에도 동일한 규칙이 적용
소스 코드 의존 관계에서 구체 모듈은 참조해서는 안 된다
하지만 이들 언어의 경우 구체 모듈이 무엇인지를 정의하기가 다소 어렵다
호출한 함수가 구현된 모듈이라면 참조하지 않기가 특히 어렵다
이 아이디어를 규칙으로 보기는 확실히 비현실적. 소프트웨어 시스템이라면 구체적인 많은 장치에 의존
Ex) java.lang.String(그래도 변경되는 일이 거의 없으며 있더라도 엄격하게 통제되므로 안정적)
위와 같은 이유로 DIP를 논한 때 운영체제나 플랫폼 같이 안정성이 보장된 환경에 대해서는 무시하는 편
이들 환경에 대한 의존성은 용납하는데, 변경되지 않는다면 의존할 수 있다는 사실을 이미 알고있기 때문
우리가 의존하지 않도록 피하고자 하는 것은 변동성이 큰 구체적인 요소다