9장. LSP : 리스코프 치환 원칙
바바라 리스코프는 하위 타입을 아래와 같이 정의했다.
- 여기에서 필요한 것은 다음과 같은 치환원칙이다. S타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다.
리스코프 치환 원칙으로 알려진 이 개념을 이해하기 위해 몇 가지 예제를 살펴본다.
- 상속을 사용하도록 가이드하기
- LSP와 아키텍처
- 객체 지향이 혁명처럼 등장한 초기에는 LSP는 상속을 사용하도록 가이드하는 방법 정도로 간주되었다.
- 시간이 지나면서 LSP는 인터페이스와 구현체에도 적용되는 더 광범위한 소프트웨어 설계 원칙으로 변모해 왔다.
- 자바스러운 언어라면 인터페이스 하나와 이를 구현하는 여러 개의 클래스로 구성된다.
- LSP 위배 사례
- 택시 파견 서비스 애플리케이션
- 고객은 어느 택시업체인지는 신경쓰지 않고 자신의 상황에 가장 적합한 택시를 찾는다.
- 이럴 경우 파견 서비스를 만들 때 다양한 택시업체에서 동일한 REST인터페이스를 반드시 준수하도록 만들어야 한다.
- 서로 다른 택시업체가 필드들에 대하여 모두 동일한 방식으로 처리해야 한다.
- 이를 위배 할 경우 꼬이게 되는 것…
결론
LSP는 아키텍처 수준까지 확장할 수 있고, 반드시 확장해야만 한다. 치환 가능성을 조금이라도 위배하면 시스템 아키텍처가 오염되어 상당량의 별도 메커니즘을 추가해야 할 수 있기 때문이다.