계약 추출
호출자가 필요한 동작 이름과 전제 조건만 base 인터페이스에 둔다.
구현 세부 제거추상 클래스는 직접 만들 수 없는 base 타입이지만 포인터나 참조로는 사용할 수 있다. 어떤 함수가 반드시 파생 구현을 가져야 하는지, 소멸자와 공통 구현은 어디에 둘지 분리한다.
호출자가 필요한 동작 이름과 전제 조건만 base 인터페이스에 둔다.
구현 세부 제거파생 클래스가 반드시 제공해야 하는 함수에 =0을 붙인다.
인스턴스 생성 금지변하지 않는 순서는 non-virtual 함수에 두고 변화 지점만 virtual로 둔다.
template method인터페이스 타입으로 소유할 수 있으면 virtual destructor를 선언하고 정의한다.
링크 오류 방지