인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다
- 클라이언트는 자신이 사용하는 메서드에만 의존해야 한다
자신이 사용하는 메서드에만 의존해야 한다
클라이언트 입장에서 사용하는 기능만 제공하도록 인터페이스를 분리해야 함
- 인터페이스를 분리하는 기준이 클라이언트가 되어야 한다
- 클라이언트가 사용하는 기능을 중심으로 인터페이스를 분리함으로써, 클라이언트로 부터 발생하는 인터페이스 변경의 여파가 다른 클라이언트에게 미치는 영향을 최소화
저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다
- 고수준 모듈: 어떤 의미 있는 단일 기능을 제공하는 모듈
- ex. 가격 계산 모듈
- 저수준 모듈: 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현
- ex. 개별적인 쿠폰 구현
쿠폰을 이용한 가격 계산 모듈이 개별적인 쿠폰 구현에 의존하게 되면...
- 새로운 쿠폰 구현 추가/변경에 따른 가격 계산 모듈 변경이 불가피
- 프로그램 변경 어려워짐
- 따라서 추상화를 하고, 거기에 concrete class가 의존하도록 만들자
- 고수준의 모듈의 변경없이 저수준을 변경할 수 있는 유연함 획득
- 이거 디자인 패턴에서 많이 보던건데...?