추상 클래스 계약

추상 클래스 계약

순수 가상 함수가 하나라도 있으면 직접 객체를 만들 수 없고, 파생 클래스가 반드시 구현해야 할 인터페이스가 됩니다.

생성 금지Shape s;는 불가능하고 구체 타입을 통해서만 객체를 만듭니다.
삭제 보장추상 기반 클래스에도 가상 소멸자를 두어 파생 자원을 정리합니다.
= 0

구현 의무를 남깁니다

virtual double area() const = 0;은 모든 구체 도형이 면적 계산을 제공하라는 계약입니다.

base

공통 호출 인터페이스를 정합니다

클라이언트 코드는 구체 클래스 이름 대신 기반 참조로 동일한 함수를 호출합니다.

derived

세부 동작을 채웁니다

Circle, Rectangle은 각자 공식을 구현하지만 호출 규약은 같습니다.

다형성 필요 신호여러 구현이 같은 메시지에 다르게 반응해야 합니다.
기반 클래스 비대화 위험기반 클래스가 구현 세부 상태를 너무 많이 알고 있습니다.
계약 검증 항목기반 소멸자, const 일관성, override 표기를 함께 둡니다.

호출 계약 추상 클래스는 “불완전한 객체”가 아니라 “구체 타입들이 지켜야 하는 호출 계약”으로 읽으면 설계가 선명해집니다.