관계 의미 확인
자식이 부모의 한 종류인지, 단지 같은 메서드 계약을 만족하면 되는지 구분한다.
is-a가 아니면 상속이 부담이 된다상속과 구현을 객체지향 일반론으로만 보면 TypeScript의 구조적 타입 시스템을 놓치기 쉽다. extends는 부모 구현과 멤버를 물려받고, implements는 클래스 인스턴스가 특정 구조를 만족하는지 검사하지만 런타임 코드를 만들지는 않는다.
자식이 부모의 한 종류인지, 단지 같은 메서드 계약을 만족하면 되는지 구분한다.
is-a가 아니면 상속이 부담이 된다공통 구현, protected helper, 기본 상태를 공유해야 할 때 부모 클래스를 확장한다.
깊은 상속은 변경 전파가 크다클래스가 특정 메서드와 속성 구조를 제공해야 할 때 interface를 구현한다.
런타임에는 interface가 사라진다부모 메서드를 덮을 때 noImplicitOverride와 override 키워드로 의도를 고정한다.
부모 이름 변경을 놓치지 않는다private와 protected가 구조적 호환성에 미치는 영향을 확인한다.
private 멤버가 있으면 같은 선언 출처가 중요해진다