CLASS RELATION

extends는 구현을 잇고, implements는 역할을 검사한다

둘 다 관계를 표현하지만 생성되는 코드와 결합 방식이 다르다.

class Dog extends Animal is-a

런타임에 남음prototype 관계와 부모 구현을 물려받는다.
한 부모 클래스생성자에서 super()로 초기화한다.
재사용 대상상태 · 메서드 · protected 멤버
변경 방식override로 행동을 덮어쓴다.

class Robot implements Runnable can-do

컴파일 때만 검사인터페이스는 JavaScript에서 사라진다.
여러 역할 가능복수 인터페이스 계약을 동시에 만족한다.
검사 대상인스턴스가 제공할 속성과 메서드 모양
제공하지 않음메서드 구현 · 상태 · 런타임 검사
공통 구현을 실제로 재사용?extends
서로 다른 클래스에 같은 역할을 보장?implements
구현 재사용과 역할 보장이 모두 필요?둘을 함께 사용
class GuideDog extends Animal implements Runnable부모 구현은 하나만 잇고, 필요한 역할 계약은 여러 개 붙일 수 있다.

TypeScript는 구조적 타입 시스템이므로 implements를 쓰지 않아도 모양이 같으면 인터페이스 타입에 할당될 수 있다.