고수준 모듈, 저수준 모듈
고수준 모듈
- 의미 있는 단일 기능 제공
- 상위 수준의 정책 구현
저수준 모듈
- 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능 실제 구현
고수준이 저수준에 직접 의존하면..?
- 저수준 모듈 변경 → 고수준 모듈에 영향을 줌
Dependency Inversion Principle (DIP)
- 의존 역전 원칙
- 고수준 모듈은 저수준 모듈 구현에 의존하면 안됨
- 저수준 모듈리 고수준 모듈에서 정의한 추상타입에 의존해야함
고수준 관점에서 추상화
- 구현 입장에서 추상화하지 말 것!
어떠한 Exception이 발생하면 Sentry라는 곳으로 Exception을 수집한다고 할 때
저수준 입장에서 추상화하면 SentryService
라는 추상타입이 도출하게 됨
하지만
고수준 입장에서 추상화하면 ExceptionCollector
라는 추상타입이 도출하게됨
DIP는 유연함을 높임
- 고수준 모듈의 변경을 최소화하면서 저수준 모듈의 변경 유연함을 높임
Sentry로 보내는 대신 ES로 보내도록 수정이 필요한 경우 ES로 보내는 클래스를 만들기만 하면된다.
부단한 추상화 노력 필요…
처음부터 바로 좋은 설계가 나오지않음