본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[책 정리] 9장. LSP(Liskov Substitution Principle): 리스코프 치환 원칙 - Clean Architecture

by 돼지왕 왕돼지 2020. 4. 13.
반응형

-

리스코프는 하위 타입(subtype)을 아래와 같이 정의했다.

 

"여기에서 필요한 것은 다음과 같은 치환(substitution)원칙이다.

S 타입의 객체 o1 각각에 대응하는 T타입 객체 o2 가 있고,

T타입을 이용해서 정의한 모든 프로그램 P 에서 o2 의 자리에 o1 을 치환하더라도 P 의 행위가 변하지 않는다면, S는 T의 하위 타입이다."

 

 

 

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

 

-

사용자가 Interface 를 바라보면서 어떤 하위타입이 사용되는지에 의존하지 않는다면 이것은 LSP 를 준수한다고 볼 수 있다.

 

 

 

정사각형/직사각형 문제

 

-

LSP 를 위반하는 전형적인 문제로는 유명한 정사각형/직사각형 문제가 있다.

 

Squre 가 Rectangle 을 상속하는 경우..

Rectangle r = ... r.setW(5); r.setH(2); assert(r.area() == 10);

 

이 코드는 r 이 Squre 일 경우 실패하게 된다.

이 경우 사용자가 subtype 에 의존하게 되기 때문에 타입을 치환할 수 없게 되어 LSP 를 준수하지 않는다고 할 수 있다.

 

 

 

LSP 와 아키텍처

 

-

아키텍처 관점에서 LSP 를 이해하는 최선의 방법은 이 원칙을 어겼을 때 시스템 아키텍처에서 무슨 일이 일어나는지 관찰하는 것이다.

 

 

 

LSP 위배 사례

 

-

LSP 가 잘 지켜지지 않으면 쉽게 코드가 변경가능하지 않고, if 문이 들어오면서 분기를 해야 할 일이 생긴다.

 

 

 

결론

 

-

치환 가능성을 조금이라도 위배하면 시스템 아키텍처가 오염되어 상당량의 별도 메커니즘을 추가해야 할 수 있다.

 

반응형

댓글