피드로 돌아가기
Dev.toBackend
원문 읽기
Liskov 치환 원칙 준수와 유연성 확보를 위한 Composition 중심 설계 전략
Inheritance — Composition vs Inheritance
AI 요약
Context
Inheritance 기반의 'is-a' 관계 설정 시 발생하는 강한 결합도와 경직된 계층 구조 분석. 특히 Penguin 사례와 같은 예외 상황 발생 시 Liskov Substitution Principle 위반 및 Fragile Base Class 문제로 인한 유지보수 비용 증가가 핵심 한계점임.
Technical Solution
- 'has-a' 관계 기반의 Composition 도입을 통한 행동 단위의 모듈화 설계
- Flyer, Swimmer 등 기능별 Interface 분리를 통한 전략적 행위 주입 구조 채택
- 상속 계층의 깊이를 최소화하여 Base Class 변경이 하위 클래스에 미치는 전파 범위 제한
- 객체 내부에서 컴포넌트 메서드를 호출하는 Delegation 패턴 적용으로 런타임 시 유연한 구현체 교체 가능
- 단순 코드 재사용 목적의 상속을 배제하고 기능적 필요에 따른 컴포넌트 조립 방식으로 전환
실천 포인트
- 상속 계층의 깊이가 3단계 이상인지 확인 - 부모 클래스의 메서드를 단순히 throw-error 처리하기 위해 Override 하고 있는지 검토 - 단순 유틸리티 함수 재사용을 위해 extends를 사용하고 있는지 체크 - 새로운 변형 모델 추가 시 중간 계층을 강제로 삽입해야 하는 구조인지 분석