본문 바로가기

WINK-(Web & App)/Spring Boot 스터디

[2024-2 SpringBoot 스터디] 1주차 - 탁태현

반응형

 

이번 강의에서 핵심적인 부분과 저랑 마찬가지로 가장 이해가 힘들었던 부분은 DIP(Dependency Inversion Principle)라고 생각이 들었습니다.

그래서 DIP를 해야하는 이유를 곰곰히 생각해 보았습니다.

 

첫번째는 강의에서 언급된 DB의 종류가 아직 정해지지 않았을 때입니다.

이런 경우에는 DAO가 해야하는 역할에서 입력 값과 출력 값 만을 명시하고 구체적인 작동은 서술하지 않는 추상화(interface)를 통해 미리 핵심 기능들을 개발해 나갈 수 있습니다.

 

 

두번째는 Domain과 Infrastructure의 개발자가 다를 때 입니다.

비즈니스 핵심 로직은 A가 코드를 만들고 Infra는 B가 코드를 만든다고 했을 때 A 개발자는 Infra코드 없이 개발을 진행해야 합니다. 이런 상황에서 A개발자 interface를 통해 Domain layer에 DAO를 추상화 해둔다면 A개발자는 infra코드의 완성에 상관없이 개발 할 수 있고, B 개발자는 병렬적으로 A의 interface를 보면서 필요한 기능들을 만들 수 있습니다. 이것이

 

application(서비스)과 infra(리포지토리)가 domain을 의존해야 하는 이유입니다.

 

 

세번째는 유지 보수성 향상과 코드 품질 향상입니다.

아래는 위키 피디아에서 가져온 DIP에 대한 글입니다.

첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
출처: https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84_%EC%97%AD%EC%A0%84_%EC%9B%90%EC%B9%99

 

단순하게 말해 아래 그림에서 Calculator와 ICalculatorOperation은 고수준의 모듈이고, 밑에는 저수준의 모듈로 나뉘고 내가 만들고자 하는 것이 "계산기"라면 고수준의 모듈은 변경될 수 없지만, 그것이 어떤 방법으로 연산을 수행하는지는 만드는 사람의 마음에 따라 바뀔 수 있다는 것입니다. 따라서 하위 모듈은 상위 모듈을 의존할 수 있지만, 상위 모듈은 하위 모듈을 의존하지 않게 하기 위해 의존성 역전을 한다고 생각합니다.

https://medium.com/@kedren.villena/simplifying-dependency-inversion-principle-dip-59228122649a

 

반응형