추상 기반 클래스
class Shape { public: virtual double area() const = 0;
std::string name() const; virtual ~Shape() = default; };
일부 함수는 계약으로 강제하고, 일부 함수는 공통 구현으로 제공할 수 있습니다.
순수 가상 함수는 반드시 구현해야 할 약속을 만들고, 일반 멤버 함수는 계층 전체가 공유할 기본 동작을 담습니다.
class Shape { public: virtual double area() const = 0;
std::string name() const; virtual ~Shape() = default; };
일부 함수는 계약으로 강제하고, 일부 함수는 공통 구현으로 제공할 수 있습니다.
class ILogger { public: virtual void log(std::string_view) = 0;
virtual ~ILogger() = default; };
상태와 구현을 거의 두지 않고, 사용할 수 있는 동작의 이름만 약속합니다.
추상 클래스가 너무 많은 상태와 정책을 가지면 파생 클래스가 불필요한 결합을 떠안습니다. 계약, 기본 동작, 소유권을 분리해서 검토합니다.