개발 etc

JAVA 자바 객체 지향 설계 5원칙 SOLID(5) - DIP 의존 역전 원칙

알통몬_ 2017. 3. 12. 20:47
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

"고차원 모듈은 저차원 모듈에 의존하면 안된다.

 이 두 모듈은 모두 다른 추상화된 것에 의존해야 한다."

"추상화된 것은 구체적인 것에 의존하면 안 된다.

 구체적인 것이 추상화된 것에 의존해야 한다."

"자주 변경되는 구체 클래스에 의존하지 마라" -로버트 C.마틴

 

자동차와 스노우 타이어 사이에는 위 그림처럼 의존관계가 있어요. 

자동차가 스노우타이어에 의존하하죠. 

그런데 자동차는 한 번 사면 오래도록 타야하는데 

스노우 타이어는 겨울이 지나면 일반타이어로 교체해야 하죠. 

이런 경우 자동차 클래스가 자주 변경되는 

구체 클래스(스노우타이어클래스)에 의존하고 있다고 할 수 있죠.


이런 경우 나쁜 냄새가 좋은 향기가 되도록 아래 그럼처럼 개선할 수 있습니다.

 

위 그림과 같이 자동차가 구체적인 타이어들(스노우, 일반, 광폭)이 아닌 

추상화된 타이어 인터페이스에만 의존하게 함으로써 

스노우타이어에서 일반타이어로 또는 다른 구체적인 타이어로 변경돼도

 자동차는 이제 그 영향을 받지 않는 형태로 구성됩니다. 

이 설명은 이미 OCP에서도 공부했던 내용입니다.

이처럼 하나의 해결책을 찾으면 그 안에 여려가지 설계 원칙이 녹아있는 경우가 있습니다.

아무튼 결론 적으로 이처럼 자신보다 변하기 쉬운 것에 

의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 

변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 DIP 의존 역전 원칙입니다.

반응형