내용

  • 서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다.

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 타입을 치환할 수 있다.

연관 페이지

참고 문헌 / 사이트