본문 바로가기
TIL/잡학다식

[잡학다식] 리스코프 치환 원칙(LSP: Liskov Substitution Principle)

by 죠르띠에 2022. 7. 13.

객체지향 설계 5원칙

  • SRP(Single Responsibility Principle) - 단일 책임 원칙
  • OCP(Open-Closed Principle) - 개방-폐쇄 원칙
  • LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
  • ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle) - 의존관계 역전 원칙

 

이번에 알아볼 것은 SOLID의 L인 LSP(Liskov Substitution Principle) - 리스코프 치환 원칙에 대해 알아볼 것이다.

 

자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다.
- WIKIPEDIA -

 

LSP 예시

대부분 리스코프 치환 원칙이 지켜지지 않은 예시로 직사각형 클래스를 상속 받은 정사각형 클래스를 들고 있다. 하지만 좀 더 이해하기 쉽도록 전부터 사용했던 스위치와 같은 예를 생각해 보고 있지만 마땅한 예가 떠오르지 않아 단순 정리로 마무리 지어야할 것 같다.

 

간단히 하면 리스코프 치환 원칙은 부모 클래스를 상속받은 자식 클래스에서 오버라이딩할 때, 그 결과가 같아야 한다.

이렇게 생각하는 이유가 자식 클래스의 메소드가 부모 클래스의 메소드를 치환해서 사용해야 하기 때문이다. 부모 클래스의 메소드가 효율이 좋지 않아 오버라이딩을 하여 자식 클래스에서 재정의해서 같은 의도로 더 효율적이게 만들 수 있다.

 

느낀점

생각보다 이해하기 어려운 원칙이었다. 구글링 했을 때, 블로그에서 예를 대부분 사각형으로 하고 있어서 어려웠다. 그래도 다른 예를 들고 있는 블로그에서 좀 더 이해하기 쉬웠다. 결국에는 치환해서 같은 결과를 나오게 하는 것이 핵심이었다. 진짜 이런 설계 원칙을 다 따라서 하면 굉장히 복잡하게 프로그래밍하겠지만 유지보수는 굉장히 편할 것이다라는 생각이 든다.