리셋 되지 말자

DIP - 의존 역전 원칙 본문

Java(폐지)/객체지향 설계 5원칙-SOLID

DIP - 의존 역전 원칙

kyeongjun-dev 2020. 7. 21. 14:24

너무 잘 정리를 해주신 글이 있어서 링크 적음...!! https://defacto-standard.tistory.com/113

"고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다." - Pass
"추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다."
"자주 변경되는 구체 클래스에 의존하지 마라."

  • 무슨소린지 1도 모르겠었지만(물론 지금도 모름) 자주 변하는 것보다는 자주 변하지 않는 것에 의존하도록 하라는 것 같다.

자주 변하는 것 vs 자주 변하지 않는 것(거의 변화가 없는 것)


  • 자주 변하는 것 : 구체적인 것
  • 자주 변하지 않는 것 : 개념이나 전략 등의 추상적인 것

예시1 : 자동차와 타이어


자동차 객체와 타이어 객체가 있을 때, 자동차와 타이어간에 '의존 관계'가 생성된다. 이때 자동차가 타이어를 필요로 한다는 것은 추상적인 것, 그리고 타이어는 구체적인 것이다.(자동차에 여러 브랜드의 타이어를 장착할 수 있고, 타이어에 펑크가 나면 교체해야 한다.)

위와 같은 의존 관계를

위와 같이, 자동차가 추상화된 타이어 인터페이스에 의존하게 변경한다.

이렇게 변경하게 되면 타이어의 종류가 바뀌어도 자동차는 타이어의 종류에 영향을 받지 않게 된다.

(OCP와 비슷하다.)

의존성 방향의 역전


타이어가 원래는 어디에도 의존하지 않는 클래스였는데, 여러 종류의 타이어들이 <>타이어에 의존하게 되었다. 이를 '의존 관계 역전'이라고 한다.

이처럼 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.

의존성 역전 원칙 의역


"자신보다 변하기 쉬운 것에 의존하지 마라"

'Java(폐지) > 객체지향 설계 5원칙-SOLID' 카테고리의 다른 글

SRP와 ISP  (0) 2020.07.21
ISP - 인터페이스 분리 원칙  (0) 2020.07.21
LSP - 리스코프 치환 원칙  (0) 2020.07.20
OCP - 개방 폐쇄 원칙  (0) 2020.07.20
SRP-단일 책임 원칙  (0) 2020.07.20
Comments