"고차원 모듈은 저차원 모듈에 의존하면 안된다.
이 두 모듈 모두 다른 추상화된 것에 의존해야 한다."
"추상화된 것은 구체적인 것에 의존하면 안된다.
구체적인 것이 추상화된 것에 의존해야 한다."
"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"
- 로버트 C.마틴
1) 의존 역전 원칙이란?
- 자동차와 스노우타이어 사이에는 아래 그림처럼 의존 관계가 있다.
자동차가 스노우타이어에 의존한다.
-그런데 자동차는 한 번 사면 몇 년은 타야 하는데 스노우타이어는 계절이 바뀌면
일반 타이어로 교체해야 한다.
이런 경우 스노우타이어를 일반타이어로 교체할 때 자동차는 그 영향에 노출돼 있음을 알 수 있다.
바로 자동차 자신보다 더 자주 변하는 스노우타이어에 의존하기에 부서지기 쉬움이라는
나쁜 냄새를 풍기고 있는 것이다.
- 그럼 이런 경우 나쁜 냄새가 좋은 향기가 되도록 개선해보자.
-위의 그림과 같이 자동차가 구체적인 타이어들(스노우타이어, 일반타이어, 광폭타이어)이 아닌
추상화된 타이어 인터페이스에만 의존하게 함으로써
스노우타이어에서 일반타이어로, 또는 다른 구체적인 타이어로 변경돼도
자동차는 이제 그 영향을 받지 않는 형태로 구성된다.
- 그런데 이 설명에서 데자뷰가 느껴질 것이다.
바로 개방 폐쇄 원칙(OCP)를 설명할 때 나온 설명이었다.
이렇게 하나의 해결책을 찾으면 그 안에 여러 설계 원칙이 녹아있는 경우가 많다.
- 위의 그림을 보면 자동차는 자신보다 변하기 쉬운 스노우타이어에 의존하던 관계를
중간에 추상화된 타이어 인터페이스를 추가해 두고
의존 관계를 역전시키고 있다.
- 이처럼 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어
변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.
'스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] 객체 지향은 절차적/구조적 프로그래밍의 어깨를 딛고 (0) | 2024.12.24 |
---|---|
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] ISP - 인터페이스 분리 원칙 (0) | 2024.12.19 |
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] LSP - 리스코프 치환 원칙 (0) | 2024.12.18 |
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] OCP - 개방 폐쇄 원칙 (0) | 2024.12.18 |
[스프링 입문을 위한 자바 객체지향의 원리와 이해] 단일 책임 원칙 (0) | 2024.12.18 |