컴퓨터/Software Architecture

[Clean Architecture] SOLID 원칙, LSP(리스코프 치환 원칙)

mikasaAck 2023. 2. 25. 01:35
728x90

intro

SOLID 원칙, 3번째 'L'(리스코프 치환 원칙)를 알아보자.

 

리스코프 치환 원칙

child class는 parent class를 대체할 수 있어야 한다.
이는 inheritance에 제한된 개념이 아니고, interface와 implement에도 적용되는 원칙이다.

즉, child class를 만들 때는 parent class의 기존 동작을 변경해서는 안 되고, 새 기능이나 동작만 추가해야 한다.

이를 위배하면 어떤 문제가 발생할까?

inheritance나 implement시에 오동작하는 위험이 있다.

대표적인 예로 정사각형/직사각형 문제가 있다.

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FYsN9G%2Fbtq0y0Uq5LQ%2FAAAAAAAAAAAAAAAAAAAAAPE6TIBsF9JqxOpYFT8B9ByrM_Ip95Ogakvm-Lcz2nbf%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1769871599%26allow_ip%3D%26allow_referer%3D%26signature%3Dzh3UWIXjQJVGxKXipIwDdBnR060%253D

 

 

아래 코드를 보자.

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

square에서는 rectangle의 method를 그 의미 그대로 사용할 수가 없다.

square는 W와 H를 다르게 정의하는 것이 불가능하기 때문이다.

그러므로, square는 rectangle을 대체할 수 없고, 이는 LSP 위반이다. 


reference

클린 아키텍처(Clean Architecture) - 9장 LSP: 리스코프 치환 원칙 (tistory.com)

728x90
반응형