1.9 KiB
1.9 KiB
id: P-Reinforce-AI-LSP category: Unified 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