개발기초

객체 지향 설계 5원칙(SOLID) - 리스코프 치환 원칙 LSP [핵심간단]

Veams 2023. 2. 21.

SRP, OCP 참고

https://veams.tistory.com/65

 

객체 지향 설계 5원칙(SOLID) - 단일책임원칙SRP, 개방폐쇄원칙 OCP

객체지향 프로그래밍, 어떤 기준으로 설계하면 좋을까? 객체 지향 설계를 할 때, 시간이 지난 후에도 유지 보수와 확장이 쉬운 프로그래밍을 하기 위한 기본 원칙이 5개가 존재한다. 개발자라면

veams.tistory.com

리스코프 치환 원칙 (LSP, Liskov substitution principle)

- "서브타입(derived)은 언제나 상위타입(base)으로 교체가 가능해야 한다."

 

객체 지향 언어에서는 객체의 상속이 일어나며 부모/자식 관계가 정의된다.

하지만 이 과정에서 상속 관계를 잘못 설정하는 경우가 생긴다.

 

LSP 원칙은 올바른 상속은 무엇인지 제시한다.

자식 클래스는 최소한 부모 클래스가 가능한 행위를 수행할 수 있어야 한다. 

 

객체의 상속 관계에서 자식 클래스는 부모 클래스에서 가능한 동작이 보장되도록 하여, 호출하는 프로그램 입장에서 부모 타입인지, 자식 타입인지 신경쓰는 상황을 없애는 것이다. 이 경우 두 클래스가 서로 교체되어도 프로그램의 동작에 문제가 생기지 않는다.

 

대표적인 상속 관계를 잘못 설정한 예시로 직사각형과 정사각형을 언급한다. 직관적으로 보기에, 직사각형은 정사각형을 포함하는 개념이다. 그래서 누군가는 직사각형을 정사각형이 상속받도록 시도할 수 있다. 

그러나 직사각형과 정사각형은 상속 관계가 될 수 없다. 이 원칙에 따르면 두 객체의 역할을 치환했을 때 동일한 결과 값이 도출되어야 하는데, 그렇지 않는 것이다. 자식 타입인 정사각형 객체는 상위 타입으로 설정한 직사각형 객체가 가진 행위를 할 수 있어야 하는데 그렇지 못하다. 직사각형은 가로와 세로가 다른 경우도 있기 때문에, 가로 세로가 모두 동일한 정사각형이 직사각형의 기능을 온전히 가질 수 없다.

 

이 경우, 상위 개념으로 사각형 객체를 구현하고, 이를 상속 받는 자식 개념으로 직사각형과 정사각형으로 각각 관계를 설정할 수 있을 것이다. (사각형-정사각형, 사각형-직사각형) 이제 자식 객체는 부모 객체의 동작을 완벽하게 대체할 수 있다.

댓글