본문 바로가기
OOP

[OOP] 객체지향의 원칙 SOLID - 리스코프 치환 원칙 (LSP)

by mizuiro 2024. 6. 23.
자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
자식 클래스는 부모 클래스의 기능을 대체하거나 확장할 수 있어야 한다. (상속 , is-a 관계)

 

리스코프 치환 원칙은 상속에 관한 원칙으로 객체지향에서의 서브타입과 슈퍼타입에 대한 개념으로 생각할 수 있다. 서브타입은 자식클래스로, 슈퍼 타입은 부모 클래스로 생각하면 서브 타입은 특수화 타입이고 슈퍼 타입은 일반화된 타입이므로 서브 타입인 자식클래스가 슈퍼 타입인 부모 클래스에 순응을 한다고 할 수 있다

 

이때 순응이란 서브타입이 슈퍼타입의 구조화 행위를 따라하는 것이다

  • 하위형식에서선행조건을 더할 수 없음
    • 자식 클래스에서 부모 클래스에 있는 기능에 추가적인 조건을 덧붙일 수 없다
  • 하위형식에서 후행조건을 약화실킬 수 없음
    • 부모 클래스에서 기능의 실행 순서를 자식 클래스에서 바꾸거나 하지 않을 수 없다
  • 슈퍼형식의 불변자는 하위 형식에서도 보존

 

다른 원칙과의 관계

  • SRP: 클래스가 단일 책임을 가지면, 서브 클래스도 그 책임을 일관되게 유지하여 LSP를 지키기 쉽습니다.
  • OCP: LSP를 준수하면 서브 클래스가 기반 클래스를 대체할 수 있으므로, 기존 클래스를 수정하지 않고도 확장이 가능해져 OCP를 만족하게 됩니다.
  • ISP: 인터페이스가 잘 분리되어 있으면, 서브 클래스가 특정 인터페이스를 구현할 때 LSP를 지키기 쉽습니다.
  • DIP: DIP를 지키면 추상화에 의존하므로, 서브 클래스가 기반 클래스를 대체하기 쉽게 되어 LSP를 만족할 수 있습니다.