피드로 돌아가기
Inheritance — Composition vs Inheritance
Dev.toDev.to
Backend

Liskov 치환 원칙 준수와 유연성 확보를 위한 Composition 중심 설계 전략

Inheritance — Composition vs Inheritance

Nghề không nhiều chẳng sắc2026년 6월 29일5intermediate

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를 사용하고 있는지 체크 - 새로운 변형 모델 추가 시 중간 계층을 강제로 삽입해야 하는 구조인지 분석

원문 읽기