공유 코드 또는 계약

추상 클래스와 인터페이스

추상 클래스는 일부 구현을 공유하며 상속 계층을 만들고, 인터페이스는 구현 없이 필요한 형태만 약속합니다.

abstract class

직접 생성 불가

공통 속성과 메서드를 두되 일부 동작은 자식 클래스가 구현하게 합니다.

abstract render(): void
공통 구현

중복 코드 제거

여러 자식 클래스가 공유할 로직이나 상태 초기화를 부모에 둡니다.

protected state
interface

계약만 선언

구현 세부사항 없이 필요한 속성과 메서드 이름을 정합니다.

interface Drawable
다중 구현

역할 조합에 유리

한 클래스가 여러 인터페이스를 구현해 기능 집합을 조합할 수 있습니다.

implements A, B
상태 공유 공유해야 할 필드와 생성자 로직이 있으면 추상 클래스를 고려합니다.
유연성 서로 다른 클래스 계층에 같은 역할을 부여하려면 인터페이스가 유리합니다.
상속 깊이 추상 클래스를 과하게 중첩하면 결합도가 높아질 수 있습니다.

추상 클래스와 인터페이스의 차이는 타입 문법보다 코드 재사용과 결합도를 어떻게 관리할지의 문제입니다.