내용
- 서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다.
Abstract
S타입의 객체 o1 , T타입의 객체 o2가 있다. 프로그램 P에서 T타입을 이용하여 정의한 모든 o2의 자리에 o1으로 치환하더라도, 프로그램 P의 행위가 변하지 않는다면 S는 T의 하위 타입이다.
--- title: License와 파생 클래스는 LSP를 준수한다. --- classDiagram class License { <<Interface>> +calcFee() } class Billing { } class PersonalLicense { } class BusinessLicense { -users } Billing ..> License PersonalLicense --|> License BusinessLicense --|> License
- Billing 애플리케이션에서 License의 calcFee() 메서드를 호출한다.
- PersonalLicense와 BusinessLicense는 서로 다른 알고리즘으로 calcFee()를 수행한다.
이 설계는 LSP를 준수한다. Billing Application의 행위가 License 하위 타입 중 무엇을 사용하는지에 대하여 전혀 의존하지 않는다. 이들 하위 타입은 모두 License 타입을 치환할 수 있다.