인터페이스를 마음대로 선택하여 사용할 수 없는 경우가 있습니다. 예를들어 어떤 모듈의 특정 기능을 사용할 경우 원하지 이 모듈이 인터페이스에 내장되어 있을 수 있습니다. 이럴때 Null 객체를 이용합니다. 시나리오 다음과 같은 인터페이스를 가진 Logger 라이브러리를 사용한다고 가정합니다. struct Logger { virtual void info(const string& s) = 0; }; Logger를 상속받은 ConsoleLogger를 구현합니다. struct ConsoleLogger : Logger { void info(const string& s) override { cout