구현 의무를 남깁니다
virtual double area() const = 0;은 모든 구체 도형이
면적 계산을 제공하라는 계약입니다.
순수 가상 함수가 하나라도 있으면 직접 객체를 만들 수 없고, 파생 클래스가 반드시 구현해야 할 인터페이스가 됩니다.
Shape s;는 불가능하고 구체 타입을 통해서만 객체를
만듭니다.
virtual double area() const = 0;은 모든 구체 도형이
면적 계산을 제공하라는 계약입니다.
클라이언트 코드는 구체 클래스 이름 대신 기반 참조로 동일한 함수를 호출합니다.
Circle, Rectangle은 각자 공식을 구현하지만
호출 규약은 같습니다.
const 일관성,
override 표기를 함께 둡니다.
호출 계약 추상 클래스는 “불완전한 객체”가 아니라 “구체 타입들이 지켜야 하는 호출 계약”으로 읽으면 설계가 선명해집니다.