---
id: P-REINFORCE-AI-LSP
category: "[[10_Wiki/💡 Topics/AI]]"
confidence_score: 0.99
tags: [SoftwareEngineering, SOLID, LSP, OOP]
last_reinforced: 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)
- Related: [[SOLID-Principles]] , [[Composition-over-Inheritance]]
- Concept: [[Type-Safety]]
