호출자가 필요한 말만 남긴다
구체 타입의 편의 함수까지 인터페이스에 넣으면 모든 구현체가 부담을 진다.
순수 가상 함수는 파생 클래스가 채워야 할 행동을 선언한다. 추상 타입이 작을수록 테스트와 교체가 쉬워진다.
구체 타입의 편의 함수까지 인터페이스에 넣으면 모든 구현체가 부담을 진다.
인터페이스 포인터로 객체를 삭제할 수 있으면 virtual destructor를 반드시 둔다.
외부 시스템과 분리하려면 추상 타입 뒤에 fake 구현을 쉽게 붙일 수 있어야 한다.
class FileSystem {
public:
virtual ~FileSystem() = default;
virtual std::string read_text(std::filesystem::path path) = 0;
};