Post
EN

LSP: 리스코프 치환 원칙

1988년 바바라 리스코프(Barbara Liskov)는 하위 타입(subtype)을 아래와 같이 정의 했다.

여기에서 필요한 것을 다음과 같은 치환(substitution)원칙이다. S 타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T 타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다.

상속을 사용하도록 가이드하기

정사각형/ 직사각형 문제

LSP를 위반하는 전형적인 문제로는 유명한(보는 관점에 따라서는 악명 높은) 정사각형/직사각형(squre/rectangle)문제가 있다.

![]()

이 예제에서 Square는 Rectangle의 하위 타입으로는 적합하지 않는데, Rectangle의 논이와 너비는 서로 독립적으로 변경될 수 있는 반면, Square의 높이와 너비는 반드시 변경되어야 하기 때문이다.

LSP와 아키텍처

자바스러운 언어라면 인터페이스 하나와 이를 구현하는 여러 개의 클래스로 구성된다.

루비라면 동일한 메서드 시그니처를 공유하는 여러 개의 클래스로 구성된다. 또는 동일한 REST 인터페이스에 응답하는 서비스 집단일 수도 있다.

결론

LSP는 아키텍처 수준까지 확장할 수 있고, 반드시 확장해야만 한다. 치환 가능성을 조금이라도 위배하면 시스템 아키텍처가 오염되어 상당량의 별도 메커니즘을 추가해야 할 수 있기 때문이다.

This article is licensed under CC BY 4.0 by the author.