Liskov Substitution Principle, 양육을 위한 모델
Source: Dev.to

아마도 저만 그런가 싶지만, 대부분의 소프트웨어 원칙은 실제 생활에 이미 존재한다는 것을 깨달을 때까지 추상적으로 느껴집니다 🌱
SOLID 원칙을 공부하면서 가장 명확한 예시 중 하나가 **리코프 치환 원칙 (LSP)**이라는 것을 알게 되었습니다 — 객체‑지향 설계의 핵심 개념 — 이것이 양육과 가족 기대와 놀라울 정도로 잘 맞아떨어집니다 👨👩👧👦
🔍 LSP가 말하는 내용 (간단히)
소프트웨어에서 LSP는 다음과 같이 말합니다:
If a class B is a subtype of class A, objects of type A should be replaceable with objects of type B without breaking the behavior expected by the client.
쉽게 말하면:
높은 수준에서 약속을 하면, 모든 구체적인 경우가 그 약속을 지킬 수 있어야 합니다 🤝
이제 바꿔보면:
- class → child 👶
- client → family 🏠
갑자기 원칙이 매우 인간적으로 보입니다.
👪 부모, 약속, 그리고 추상화
- 소프트웨어에서는 기본 클래스가 기대치를 정의합니다.
- 가족에서는 부모가 규칙과 책임을 정의합니다.
문제는 부모가 이렇게 말할 때 발생합니다:
“우리 모든 자녀는 X를 해야 한다.”
…but not all children are actually capable of doing X.
그럴 때 문제는 아이가 아니라 기대치에 있습니다. ⚠️
이는 기본 클래스가 모든 하위 클래스가 안전하게 지원할 수 없는 동작을 정의할 때 소프트웨어에서 일어나는 일과 정확히 같습니다.
🤥 부모가 “거짓말”할 때
프로그래밍에서는 추상화가 거짓말하고 있다고 말합니다. 이는 보편적으로 유효하지 않은 동작을 약속할 때입니다.
가정에서는 다음과 같은 형태로 나타납니다:
- 모든 아이가 같은 방식으로 성공하기를 기대한다 🎯
- 연령이나 능력에 관계없이 같은 책임을 부여한다 🧱
- 아이에게 맞지 않는 기대 때문에 처벌한다 🚫
소프트웨어에서는 결과가 깨진 동작이 됩니다.
가정에서는 좌절, 원망, 그리고 끊임없는 갈등이 발생합니다 💥
🧠 공유된 교훈
소프트웨어를 설계하든 가족을 키우든:
누군가가 계속해서 “나는 할 수 없어”라고 말해야 한다면, 그 약속이 잘못됐을 가능성이 높다.
LSP는 개발자에게 아래가 아니라 위를 바라보라고 가르칩니다 — 구현을 비난하기보다 계약을 고치라는 것이죠 🔄
🌟 최종 생각
강력한 시스템 — 기술이든 인간이든 — 은 명확한 기대, 정직한 약속, 그리고 차이에 대한 존중 위에 세워집니다.
- 추상화가 진실될 때, 치환은 안전해집니다.
- 기대가 공정할 때, 관계는 건강해집니다 💚