EXTENDS IMPLEMENTS

extends와 implements

클래스 설계에서 extends와 implements의 차이는 재사용 vs 계약보다 더 깊다. override 안전성, abstract 멤버, 다중 계약, 구조적 타입 호환성을 함께 봐야 한다.

01

공통 구현 여부

부모의 코드와 상태를 실제로 재사용해야 하면 extends를 검토한다.

inherit behavior
02

계약만 필요한지

동일한 메서드 형태만 요구하면 interface implements가 더 느슨하고 안전하다.

구조적 계약
03

추상화 경계

일부 구현은 공유하고 일부는 자식이 채워야 하면 abstract class를 사용한다.

template method
04

override 검증

부모 메서드를 바꿀 때 시그니처와 의미가 깨지지 않는지 확인한다.

LSP
extends
부모 변경이 자식 전체에 영향 깊은 상속 계층은 초기화 순서와 protected 상태 의존을 복잡하게 만든다.
fragile base
implements
런타임 구현 공유 없음 인터페이스는 컴파일 후 사라지므로 생성 로직이나 기본 동작을 제공하지 않는다.
type only
multiple implements
여러 계약 동시 만족 TS는 구조적 타입이라 이름보다 필요한 멤버 형태가 맞는지가 중요하다.
structural typing
abstract
공통 흐름 강제 기본 알고리즘은 부모에 두고 세부 단계만 자식이 구현하게 할 수 있다.
base + holes

리팩터링 기준

is-a 관계 자식이 부모의 모든 사용 위치를 대체할 수 없으면 extends를 피한다.
테스트 대체 implements 계약은 mock/fake 구현을 쉽게 만들 수 있어야 한다.
상태 공유 상속으로 공유한 protected 상태가 많아지면 composition을 검토한다.