IT 이론지식

LSP (Liskov Substitution Principle)

쥐PT 2024. 4. 14. 23:51
728x90
반응형
SMALL

LSP (Liskov Substitution Principle)는 객체 지향 프로그래밍(OOP)의 SOLID 원칙 중 하나로, 서브타입은 기반 타입으로 교체 가능해야 한다는 원칙을 의미합니다. 이 원칙은 프로그램 설계의 유연성과 확장성을 향상시키는 중요한 원칙 중 하나입니다. LSP는 상속 관계에서 발생할 수 있는 문제를 방지하고, 코드의 재사용성과 유지 보수성을 향상시키는 데 기여합니다.

LSP의 주요 개념

  1. 서브타입과 슈퍼타입
    • 슈퍼타입: 기반 타입으로 사용되는 클래스나 인터페이스입니다.
    • 서브타입: 슈퍼타입을 상속받은 자식 클래스입니다.
  2. 교체 가능성
    • 서브타입 객체는 슈퍼타입 객체로 교체되어도 프로그램의 의도된 동작이 변하지 않아야 합니다.

LSP의 핵심 원칙

  1. 서브타입의 강건성 (Robustness of Subtypes)
    • 서브타입은 슈퍼타입의 규칙을 준수하며, 추가적인 규칙을 정의하여 자신의 특성을 확장할 수 있습니다.
  2. 동작의 불변성 (Behavioral Preservation)
    • 서브타입 객체는 슈퍼타입 객체가 가져야 할 모든 동작을 지원하고, 동일한 상황에서 동일한 결과를 반환해야 합니다.

LSP 위반의 예

LSP를 위반하는 코드는 아래와 같은 문제를 발생시킬 수 있습니다.

  1. 컴파일 타임 에러
    • 서브타입 객체를 슈퍼타입으로 사용할 때 컴파일 타임 에러가 발생할 수 있습니다.
  2. 런타임 에러
    • 프로그램이 예상치 못한 방식으로 동작하거나, 예외가 발생할 수 있습니다.
  3. 불필요한 복잡성
    • LSP를 위반하는 설계는 복잡성을 증가시키며, 유지 보수가 어려워질 수 있습니다.

LSP 준수를 위한 가이드라인

  1. 추상화 (Abstraction)
    • 공통된 동작과 속성을 정의하여 슈퍼타입을 추상화합니다.
  2. 다형성 (Polymorphism)
    • 서브타입은 슈퍼타입의 메서드를 오버라이딩하여 특화된 동작을 구현합니다.
  3. 테스트 (Testing)
    • LSP를 준수하는지 검증하기 위한 테스트 케이스를 작성하고 실행합니다.
  4. 리팩토링 (Refactoring)
    • LSP 위반 코드를 식별하고, 코드를 재구성하여 원칙을 준수하도록 개선합니다.

LSP의 장점

  1. 유연성 (Flexibility)
    • 다양한 서브타입을 슈퍼타입으로 교체할 수 있어 시스템의 유연성이 향상됩니다.
  2. 유지 보수성 (Maintainability)
    • 코드의 재사용성이 높아져 유지 보수가 용이해집니다.
  3. 확장성 (Scalability)
    • 새로운 기능과 요구사항을 쉽게 추가하거나 확장할 수 있습니다.

결론

LSP (Liskov Substitution Principle)는 객체 지향 프로그래밍에서 중요한 원칙으로, 상속 관계에서 발생할 수 있는 문제를 방지하고, 코드의 유연성, 유지 보수성, 확장성을 향상시키는 데 기여합니다. 서브타입과 슈퍼타입 사이의 교체 가능성을 보장하여 시스템의 안정성과 신뢰성을 높이는 것이 핵심입니다. 따라서 개발자는 LSP 원칙을 준수하여 객체 지향 프로그래밍의 효율성과 품질을 높이는 데 주의를 기울여야 합니다.

728x90
반응형
LIST

'IT 이론지식' 카테고리의 다른 글

인공지능전환(AI Transformation, AX)  (0) 2024.04.17
Belady's Anomaly(벨라디의 모순)  (0) 2024.04.17
WBS (Work Breakdown Structure)  (0) 2024.04.14
JAD (Joint Application Design)  (0) 2024.04.14
CDC(Change Data Capture)  (0) 2024.04.12