TypeScript Class

extends는 재사용, implements는 계약

상속은 부모 클래스의 실제 구현을 가져오고, 구현은 인터페이스가 요구하는 모양을 클래스가 채우게 합니다.

extends

부모 클래스
1

구현 재사용

부모의 필드, 생성자 초기화, 메서드 구현을 자식이 물려받습니다.

2

오버라이딩

같은 메서드를 다시 정의해 자식 클래스에 맞게 동작을 바꿉니다.

3

super 호출

생성자와 메서드에서 부모의 초기화나 기존 동작을 이어서 씁니다.

implements

인터페이스
1

계약 충족

인터페이스가 요구한 속성과 메서드를 빠짐없이 구현합니다.

2

구현은 직접 작성

인터페이스는 타입 약속만 제공하고 실제 코드는 클래스가 가집니다.

3

여러 역할 조합

한 클래스가 여러 인터페이스를 만족해 역할 중심으로 확장됩니다.

명확한 is-a 관계

자식이 부모의 한 종류라면 `extends`를 먼저 검토합니다.

역할만 맞추기

동일한 기능 계약이 필요하면 `implements`가 더 느슨합니다.

변경 영향 줄이기

부모 변경에 묶이면 부담이 커지므로 계약 중심 설계를 고려합니다.

경험칙

코드를 물려받아 확장해야 하면 `extends`, 모양과 역할을 보장해야 하면 `implements`입니다. 둘은 함께 사용할 수 있지만 책임은 다릅니다.