DIP : 의존 역전 원칙
"고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다."
"추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다."
"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"
"자신보다 변하기 쉬운 것에 의존하지 마라"
- 로버트 C 마틴
자동차와 스노우타이어 사이에는 의존 관계가 있다. 자동차가 스노우 타이어에 의존한다. 자동차는 한 번 사면 몇 년은 타야 하는데 스노우 타이어는 일반 타이어로 교체해야 한다. 스노우 타이어를 일반 타이어로 교체할 때 자동차는 그 영향에 노출돼 있음을 알 수 있다.
자동차가 구체적인 타이어들(스노우, 일반, 광폭)이 아닌 추상화된 타이어 인터페이스에만 의존하게 함으로써 스노우 타이어에서 일반타이어로, 또는 다른 구체적인 타이어로 변경돼도 자동차는 이제 그 영향을 받지 않는 형태로 구성된다. 기존에는 스노우 타이어가 무엇으로도 의존하지 않는 클래스였는데 추상적인 것인 타이어 인터페이스에 의존하게 됐다. 이것이 의존의 방향이 역전되었다고 한다.
자동차는 변하기 쉬운 스노우타이어에 의존하던 관계를 중간에 추상화된 타이어 인터페이스를 추가해 두고 의존 관계를 역전시키고 있다. 이처럼 자신보다 변하기 쉬운 것에 의존하는 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.
상위 클래스일수록, 인터페이스일수록, 추상 클래스일수록 변하지 않을 가능성이 높기에 하위 클래스나구체 클래스가 아닌 상위 클래스, 인터페이스, 추상 클래스를 통해 의존하라는 것이 바로 의존 역전 원칙이다.
의존 역전 원칙을 적용한 대표적인 사례는 개방 폐쇄 원칙에서 설명했던 JDBC 에서도 확인할 수 있다.
출처 - 스프링 입문을 위한 자바 객체 지향의 원리와 이해
'자바 디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 프록시 패턴(Proxy Pattern) (0) | 2018.10.12 |
---|---|
디자인 패턴 - 어댑터 패턴(Adapter Pattern) (0) | 2018.10.12 |
자바 객체 지향의 원리 SOLID - ISP : 인터페이스 분리 원칙 (1) | 2018.10.12 |
자바 객체 지향의 원리 SOLID - LSP : 리스코프 치환 원칙 (0) | 2018.10.12 |
자바 객체 지향의 원리 SOLID - OCP : 개방 폐쇄 원칙 (0) | 2018.10.11 |