Post
KO

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.