영호
[OOP] SOLID - DIP(의존성 역전 원칙) 본문
의존성 역전 원칙(DIP)란
간단하게 말해 "구체 클래스가 아닌 추상화에 의존해라"입니다.
DIP에 찾아보면 고수준 모듈(클래스), 저수준 모듈(클래스)이란 단어가 많이 보입니다. 저수준 모듈은 고수준 모듈의 작업을 돕는 역할입니다. 이는 고수준 모듈이 저수준 모듈에 의존한다는 것을 의미합니다.
그러나 DIP는 고수준 모듈은 저수준 모듈에 의존하는 것이 아닌 추상화에 의존해야 한다고 합니다.
위 그림은 고수준이 저수준을 직접 의존하는 관계입니다.
만약, 스노우타이어에서 산악 드라이브를 위해 이에 적합한 타이어로 구체 클래스를 변경한다면 자동차에도 변경에 대한 영향이 연쇄적으로 미칠 것입니다.
DIP준수
현재 자동차라는 고수준 모듈이 직접 스노우타이어라는 저수준 모듈에 의존하고 있습니다. 그러나 저는 이를 DIP를 지키기 위해 자동차가 추상화에 의존하도록 하고 싶습니다. 그래서 인터페이스를 이용해 스노우타이어를 타이어로 추상화한 그림은 아래와 같습니다.
정리
이처럼 변하기 쉬운 저수준 모듈에 직접 의존하기보단 변경 가능성이 적은 추상화에 의존함으로써 변경의 영향을 덜 받게 하는 것이 의존성 역전 원칙입니다.
현재 인터페이스를 통한 추상화를 사용해서 그렇지만, 만약 구현 클래스가 잘 바뀌지 않는 경우도 있을 수 있다고 생각합니다. 이 경우 어떤 방법을 통해 DIP를 만족할 수 있을지에 대해 추가적으로 찾아볼 예정입니다.
출처
SOLID
'OOP' 카테고리의 다른 글
[OOP] EnumMap과 함수형 인터페이스로 커맨드 패턴 적용해보기 (0) | 2023.03.26 |
---|---|
다형성이란? (4) | 2023.03.11 |
[SOLID] ISP(인터페이스 분리 원칙) (0) | 2022.06.07 |
[OOP] SOLID - LSP(리스코프 치환 원칙) (0) | 2022.06.05 |
[OOP] SOLID - OCP(개방-폐쇄 원칙) (0) | 2022.05.25 |
Comments