추상 클래스 계약
추상 클래스 설계 기준
순수 가상 함수는 객체를 직접 만들 수 없게 하는 대신, 파생 클래스가 반드시 제공해야 할 동작의 이름과 형태를 고정합니다.
필수 구현
순수 가상 함수는 파생 클래스가 구현하지 않으면 여전히 추상 클래스입니다.
인터페이스 성격
멤버 변수를 줄이고 함수 계약만 두면 결합도가 낮아집니다.
교체 가능한 의존성
함수는 ILogger 같은 추상 타입을 받아 구현 교체에 열려 있게 됩니다.
가상 소멸자
추상 기반 클래스도 포인터로 삭제될 수 있다면 virtual destructor가 필요합니다.