요약 - 로거 팩토리
Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 66번째.
챌린지
쉬움Factory 패턴을 사용하여 logging 시스템을 만들어 봅시다! 공통 인터페이스를 공유하는 서로 다른 유형의 logger를 만들고, 간단한 문자열 인수를 기반으로 적절한 logger를 생성하는 factory function을 사용합니다.
코드를 네 개의 파일로 구성합니다:
ConsoleLogger.lua::new()constructor와:log(message)method를 갖는 ConsoleLogger class를 Create합니다.:log()가 call되면[CONSOLE]prefix와 함께 message를 출력해야 합니다. 예를 들면[CONSOLE] Your message here와 같습니다.FileLogger.lua: 동일한 구조의 FileLogger class를 Create합니다. 즉,:new()constructor와:log(message)method를 사용합니다. 이 logger는 대신[FILE]prefix와 함께 messages를 출력해야 합니다.LoggerFactory.lua: 이곳에서 Factory 패턴이 완성됩니다! 문자열 인수를 받는createLogger(loggerType)function을 Create합니다. type이"console"이면 새로운 ConsoleLogger를 반환합니다. type이"file"이면 새로운 FileLogger를 반환합니다. factory가 어떤 class를 인스턴스화할지에 대한 모든 세부 사항을 처리합니다.main.lua: LoggerFactory module을 require합니다. 두 개의 inputs, 즉 logger type과 기록할 message를 Read합니다. factory를 사용하여 appropriate logger를 Create한 다음, message와 함께 해당 logger의:log()method를 call합니다.
이 설계의 장점은 main 코드가 factory와만 상호 작용한다는 것입니다. ConsoleLogger나 FileLogger에 대해 직접 알 필요가 없습니다. 두 logger 모두 동일한 :log() 인터페이스를 Implement하므로 서로 바꿔 사용할 수 있습니다.
두 개의 inputs를 받습니다:
- Logger type (
"console"또는"file"중 하나) - 기록할 message
예를 들어 inputs가 console과 Application started라면 output은 다음과 같아야 합니다:
[CONSOLE] Application startedinputs가 file과 Saving user data...라면 output은 다음과 같아야 합니다:
[FILE] Saving user data...직접 해보기
-- main.lua
-- 로깅 시스템의 메인 진입점
local LoggerFactory = require('LoggerFactory')
-- 입력 읽기
local loggerType = io.read()
local message = io.read()
-- TODO: LoggerFactory를 사용하여 적절한 로거를 생성하세요
-- 그런 다음 메시지와 함께 :log() 메서드를 호출하세요
객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러