Skip to main content

LSP

LSP란?

  • 리스코프 치환 원칙
  • Liskov Subtitution Principle
  • 상위 타입(슈퍼클래스)을 하위타입(서브클래스)의 인스턴스로 바꿔도 프로그램의 동작을 해치지 않아야한다.

위 말이 생각보다 어렵죠... 쉽게 말해서 부모의 동작을 제한해서는 안된다. 입니다. 예를 들어서 직사각형을 상속받아서 정사각형을 만들면 이것이 LSP 위반입니다. 자식이 부모의 동작을 제한하면 안되기 때문이죠~

이럴 때에는 반대로 직사각형이 정사각형을 상속 받거나 너비와 높이를 받는 것을 그냥 let으로 박아버리면 값을 바꿀 수 조차 없어서 LSP를 준수하게 됩니다. LSP를 어기지 않고 프로그래밍하는 것은 어렵습니다. 너무 많은 곳에서 LSP를 어긴다면 상위 클래스를 기준으로 코딩할 수 없고 상속 자체가 의미가 없어지고 OCP 조차 할 수 없어집니다.

그리고 LSP의 특징으로는 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있습니다. 프로그램의 객체는 프로그램의 정확성을 깨트리지 않고 아위 타입의 인스터스로 바꿀 수 있어야한다는 것이 LSP의 특징이라고 할 수 있죠 또 하나의 예시를 들자면 자동차의 엑설을 누르면 앞으로 가야하지만 이걸 뒤로 가게 하면 안되겠죠? ^^

정리해서 당연한 것은 당연해야지 변수가 있어서는 안된다가 LSP입니다. 마지막 예시를 들자면 총을 쏘면 쏜 방향으로 나가야지 쏜 나를 향에 총구가 날라오면 안됩니다.