C++ 추상 클래스

순수 가상 함수 계약

추상 클래스는 직접 만들 수 없는 base 타입이지만 포인터나 참조로는 사용할 수 있다. 어떤 함수가 반드시 파생 구현을 가져야 하는지, 소멸자와 공통 구현은 어디에 둘지 분리한다.

01

계약 추출

호출자가 필요한 동작 이름과 전제 조건만 base 인터페이스에 둔다.

구현 세부 제거
02

순수 지정

파생 클래스가 반드시 제공해야 하는 함수에 =0을 붙인다.

인스턴스 생성 금지
03

공통 흐름

변하지 않는 순서는 non-virtual 함수에 두고 변화 지점만 virtual로 둔다.

template method
04

소멸 경로

인터페이스 타입으로 소유할 수 있으면 virtual destructor를 선언하고 정의한다.

링크 오류 방지
=0
순수 가상 선언 함수가 반드시 파생에서 구현되어야 하며 클래스는 abstract가 된다.
정의도 가능
interface
상태 없는 계약 데이터 멤버가 늘수록 구현 base 성격이 강해진다.
역할 분리
NVI
검증은 base, 세부는 virtual public non-virtual 함수가 전후 조건을 지키고 protected virtual을 호출한다.
불변식 보호
default impl
일부 기본 구현 제공 모든 파생이 공유하는 안전한 기본 동작만 base에 둔다.
강제와 선택 분리

생성 금지 · 소멸자 정의 · 계약 문서 점검

생성 금지 abstract class 자체를 값으로 만들려는 코드가 없는지 확인한다.
소멸자 정의 순수 가상 소멸자라도 out-of-line 정의가 필요한지 본다.
계약 문서 파생 구현이 지켜야 하는 전제와 예외 보장을 base 주석 또는 이름으로 드러낸다.