의존성 역전 원칙 (Dependency Inversion Principle, DIP)
- "의존 관계를 맺을 때, 변하기 쉬운(구체적인) 것보다는 변하기 어려운(추상적인) 것에 의존해야한다."
- “추상화에 의존해야지, 구체화에 의존하면 안된다.”
구체화된 클래스에 의존하기 보다는 추상 클래스나 인터페이스와 관계를 맺는 것을 의미한다.
간단히 말해서, 추상성에 의존하라는 원칙이다. 이를 통해 비즈니스와 관련된 부분이 세부 사항에는 의존하지 않고자 한다.
고수준 계층의 모듈(클래스)은 저수준 계층의 모듈(클래스)이 있다고 하자.
- 고수준: 입력과 출력에 먼 추상화된, 비즈니스적인 부분을 다루는
- 저수준: 고수준 모듈에서 기능을 수행하기 위해 도와주는 역할로, 입력과 출력으로부터 가까운 HTTP, 데이터베이스, 캐시... 같은 것들
만약 추상화를 하지 않고 고수준 계층의 모듈이 저수준 계층의 모듈에 의존한다고 가정하자.
저수준 계층의 코드는 수정이 빈번하게 생길 수 있는데, 저수준에서의 사소한 변화로도 고수준 계층의 코드를 함께 변경해야할 것이다.이에 따라 소모되는 개발 코스트는 크게 증가할 것이다.
이 때문에 저수준 모듈을 수정하더라도 고수준 모듈 코드를 수정하지 않도록 코드를 구성해야한다.
정리
첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
참고
https://mangkyu.tistory.com/194
https://blog.hexabrain.net/395
'개발기초' 카테고리의 다른 글
[자바스크립트] 비동기적 처리를 돕는 '콜백 함수' (0) | 2023.04.13 |
---|---|
[자바스크립트] 비동기적 처리를 위한 '이벤트 루프'에 대해 알아보자 (1) | 2023.04.13 |
객체 지향 설계 5원칙(SOLID) - 인터페이스 분리 원칙 ISP [핵심간단] (0) | 2023.02.21 |
객체 지향 설계 5원칙(SOLID) - 리스코프 치환 원칙 LSP [핵심간단] (0) | 2023.02.21 |
객체 지향 설계 5원칙(SOLID) - 단일책임원칙SRP, 개방폐쇄원칙 OCP (0) | 2023.02.21 |
댓글