Abstract vs Interface

추상 클래스와 인터페이스

둘 다 구현 클래스의 구조를 제한하지만, 런타임에 남는 공통 구현이 필요한지, 선언 병합과 다중 implements가 필요한지에 따라 선택이 갈린다.

선택 기준 비교

type design

추상 클래스

공통 메서드 구현, protected 필드, abstract method를 함께 둘 수 있다.

인터페이스

객체가 가져야 할 속성과 메서드 형태만 선언하고 JS 출력에는 남지 않는다.

재사용 필요

공통 상태, 생성자 흐름, template method가 있으면 추상 클래스가 어울린다.

유연한 계약

여러 계약을 동시에 만족하거나 외부 타입을 확장하면 interface가 가볍다.

계약reuseextendimplement
추상화 경계 선택

구현과 런타임 상속이 필요하면 추상 클래스, 형태 약속과 조합 가능성이 중요하면 interface로 보면 된다.