--- id: [[P-Reinforce|P-Reinforce]]-AI-LSP category: Dev confidence_score: 0.99 tags: [SoftwareEngineering, SOLID, LSP, OOP] last_reinforced: 2026-04-20 --- # [[Liskov-Substitution-Principle|Liskov-Substitution-Principle]] (리스코프 치환 원칙) ## 📌 한 줄 통찰 (The Karpathy Summary) > "자식은 언제든 부모의 자리를 완벽하게 대신할 수 있어야 한다." 자식 클래스는 부모 클래스의 기존 기능을 깨뜨리지 않고 확장해야 하며, 부모를 사용하는 코드는 자식이 누군지 몰라도 아무 문제 없이 작동해야 한다는 원칙이다. ## 📖 구조화된 지식 (Synthesized Content) - **The Rule**: 프로그램의 객체 $S$가 $T$의 하위 타입이라면, 프로그램의 속성 변경 없이 $T$ 타입의 객체를 $S$ 타입의 객체로 치환할 수 있어야 한다. - **Classic Counter-example**: **Square-Rect[[ANGLE|ANGLE]] Problem**. - 정사각형(Square)은 직사각형(Rectangle)의 일종이지만, 가로/세로를 독립적으로 바꾸는 직사각형의 메서드를 상속받아 강제로 가로=세로로 고정해버리면, 부모의 행동 규약을 깨뜨리게 되어 LSP 위반이다. - **Key Message**: '상속'은 단순히 코드를 재사용하는 수단이 아니라, 부모 클래스가 외부와 맺은 '계약([[Behavior|Behavior]]al Contract)'을 충실히 이행할 때만 정당화된다. ## ⚠️ 모순 및 업데이트 (RL Update) - LSP를 억지로 지키려다 보면 상속 구조가 복잡해지거나 추상화 단계가 너무 많아질 수 있다. 현대 소프트웨어 공학은 '상속(Inheritance)'보다는 **'조합(Composition)'**을 권장하며, 상속을 쓸 때는 인터페이스나 추상 클래스를 통해 최소한의 행동 규칙만 정의하는 방식으로 LSP 리스크를 회피한다. ## 🔗 지식 연결 (Graph) - Related: SOLID-[[Principles|Principles]] , Composition-over-Inheritance - Concept: Type-Safety