Dependency Inversion Principle(DIP)
- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다. 둘 모두 추상화에 의존해야 한다.
- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다?
- 하위 수준의 모듈이 상위 수준의 모듈에 의존하도록 만들 것
- 둘 모두 추상화에 의존해야 한다?
- 추상화는 구체적인 사항에 의존해서는 안된다. 구체적인 사항은 추상화에 의존해야 한다.
모듈?
- 응집도가 높고 결합도가 낮은 단위로 잘 모아 둔 것들
- 프로젝트 안의 Jar로 끝나는 파일들
- 자바에서는 패키지가 모듈을 구분하는 기준이 될 수 있음
우리의 코드를 모듈로 구분해보자
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/24bf9f4b-7f09-437b-9bb7-79f11ec93d83/image.png)
Payment
와 관련된 정책과 비즈니스 핵심 로직 모듈 (상위)
- 정책을 결정하는 중요한 담당하는 모듈이 있는 곳 :
Policy Layer
- 비즈니스가 바뀌지 않는 한, 잘 변하지 않는 모듈
- 환율 정보를 어떻게 가져올 것인지 관심이 담긴 모듈 (하위)
- 환율 정보를 가져오는 모듈이 있는 곳 :
Mechanism Layer
- 기술적인 역할을 하는 모듈
런타임에 어떻게 사용이 되는가
PaymentService
오브젝트가 WebApiExRateProvider
오브젝트를 사용
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/7bfb8de4-a6a9-4a16-8ba7-ec89a74d44e2/image.png)
그렇기 때문에 코드 레벨에서도 의존관계가 아래의 그림과 같이 만들어 지는 것임
![image.png](https://prod-files-secure.s3.us-west-2.amazonaws.com/a7e1e85e-d6f9-43d3-8475-0933babeaf4a/24bf9f4b-7f09-437b-9bb7-79f11ec93d83/image.png)