요약: Logger Factory
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 57번째.
챌린지
쉬움Logger Factory를 만들어 봅시다. 이는 Factory 패턴과 다형성을 결합하는 강력한 기능을 보여 주는 시스템입니다. 이 factory는 configuration flag에 따라 서로 다른 logger 구현을 생성하므로, logger를 사용하는 방식을 변경하지 않고도 자세한 console 출력과 조용한 "dummy" logging 사이를 전환할 수 있습니다.
코드를 세 개의 파일로 구성합니다.
logger.h: interface 역할을 하는Loggerstruct를 Define합니다.Logger*와const char*message를 받는log용 function pointer를 포함해야 합니다. integer flag(콘솔의 경우 1, dummy의 경우 0)를 받아Logger*를 반환하는 factory functioncreate_logger를 선언합니다. 또한 정리를 위한free_loggerfunction도 선언합니다.logger.c: 두 가지 구체적인 logger type을 Implement합니다.ConsoleLogger는 첫 번째 member로Logger를 embeds하며,[LOG] message형식으로 message를 출력하는 log function을 가집니다.DummyLogger도Logger를 embeds하지만 해당 log function은 아무 작업도 하지 않습니다. 출력하지 않고 단순히 반환합니다. 각 type에 대한 Constructor function을 만들어 memory를 Allocate하고 appropriate log function을 연결합니다. 그런 다음 flag를 확인하고 appropriate logger type을Logger*로 반환하는 factory로create_logger를 Implement합니다. memory를 해제하도록free_logger를 Implement합니다.main.c: 생성할 logger를 결정하기 위해 integer(1 또는 0)를 읽습니다. factory를 사용해 appropriate logger를 create한 다음, 두 message인"Starting application"과"Shutting down"을 사용해 해당 logger의logfunction을 Call합니다. 마지막으로 logger를 Free합니다.
프로그램은 logger type을 나타내는 하나의 input을 받습니다(콘솔의 경우 1, dummy의 경우 0).
input이 1일 때의 예시 output:
[LOG] Starting application
[LOG] Shutting downinput이 0일 때의 예시 output:
(output 없음: dummy logger는 모든 message를 조용히 무시합니다.)
여기서 우아한 점은 어떤 type을 받는지와 관계없이 main.c가 logger를 동일한 방식으로 사용한다는 것입니다. 무엇을 create할지는 factory가 결정하고, 다형성은 올바른 동작이 실행되도록 보장합니다. 이 패턴은 개발 중에는 자세한 logging을 사용하고 production에서는 조용히 작동하도록 할 수 있는 실제 application에서 매우 유용합니다.
직접 해보기
#include <stdio.h>
#include "logger.h"
int main() {
// 로거 타입 플래그를 읽습니다 (1은 콘솔, 0은 더미)
int flag;
scanf("%d", &flag);
// TODO: 팩토리를 사용하여 적절한 로거를 생성합니다
// TODO: Call the logger's log function with "Starting application"
// TODO: Call the logger's log function with "Shutting down"
// TODO: 로거를 해제합니다
return 0;
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러