Files
2nd/10_Wiki/Topics/AI/Liskov-Substitution-Principle.md
T

1.9 KiB

id, category, confidence_score, tags, last_reinforced
id category confidence_score tags last_reinforced
P-REINFORCE-AI-LSP 10_Wiki/💡 Topics/AI 0.99
SoftwareEngineering
SOLID
LSP
OOP
2026-04-20

Liskov-Substitution-Principle (리스코프 치환 원칙)

📌 한 줄 통찰 (The Karpathy Summary)

"자식은 언제든 부모의 자리를 완벽하게 대신할 수 있어야 한다." 자식 클래스는 부모 클래스의 기존 기능을 깨뜨리지 않고 확장해야 하며, 부모를 사용하는 코드는 자식이 누군지 몰라도 아무 문제 없이 작동해야 한다는 원칙이다.

📖 구조화된 지식 (Synthesized Content)

  • The Rule: 프로그램의 객체 $S$가 $T$의 하위 타입이라면, 프로그램의 속성 변경 없이 T 타입의 객체를 S 타입의 객체로 치환할 수 있어야 한다.
  • Classic Counter-example: Square-Rectangle Problem.
    • 정사각형(Square)은 직사각형(Rectangle)의 일종이지만, 가로/세로를 독립적으로 바꾸는 직사각형의 메서드를 상속받아 강제로 가로=세로로 고정해버리면, 부모의 행동 규약을 깨뜨리게 되어 LSP 위반이다.
  • Key Message: '상속'은 단순히 코드를 재사용하는 수단이 아니라, 부모 클래스가 외부와 맺은 '계약(Behavioral Contract)'을 충실히 이행할 때만 정당화된다.

⚠️ 모순 및 업데이트 (RL Update)

  • LSP를 억지로 지키려다 보면 상속 구조가 복잡해지거나 추상화 단계가 너무 많아질 수 있다. 현대 소프트웨어 공학은 '상속(Inheritance)'보다는 **'조합(Composition)'**을 권장하며, 상속을 쓸 때는 인터페이스나 추상 클래스를 통해 최소한의 행동 규칙만 정의하는 방식으로 LSP 리스크를 회피한다.

🔗 지식 연결 (Graph)