참조:
지금까지 이 원칙을 단순히 추상 클래스 / 인터페이스로 콘크리트 클래스를 변환할 수 있으면 된다고 생각했다. 다형성 말이다. 처음 배울 때도 제목과 개요만 읽고 대충 이해하고 넘어갔었다. 하지만 위 게시글을 읽고 그런 단순한 원칙이 아님을 깨달았다. 이름에 모든 것이 담겨 있다.
클라이언트 코드에서 의존 관계에 있는 클래스를 생성하여 사용하는 의존 관계를 가지지 말고 해당 클래스가 클라이언트 코드를 가진 클래스를 의존하도록 만드는 것이다. 이를 구현하기 위해서 Dependency Injection, SoC, IoC 개념이 적용된다.
첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
위 원칙 설명을 아무것도 모른채 이해한다면 정말 콘크리트 클래스가 아닌 인터페이스 참조로 이해할 수 있다. 하지만 이름을 정확하게 이해한다면 설명이 명확하게 이해되기 시작한다.