요약 - 로거 팩토리
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 66번째.
챌린지
쉬움팩토리 패턴을 사용하여 로깅 시스템을 구축해 봅시다! 공통 인터페이스를 공유하는 다양한 유형의 로거를 만든 다음, 간단한 문자열 인수를 기반으로 적절한 로거를 생성하는 팩토리 함수를 사용하게 됩니다.
코드는 다음 네 개의 파일로 구성됩니다:
ConsoleLogger.lua::new()생성자와:log(message)메서드를 가진 ConsoleLogger 클래스를 만듭니다.:log()가 호출되면, 메시지 앞에[CONSOLE]접두사를 붙여[CONSOLE] Your message here와 같이 출력해야 합니다.FileLogger.lua: 동일한 구조(:new()생성자와:log(message)메서드)를 가진 FileLogger 클래스를 만듭니다. 이 로거는 메시지 앞에[FILE]접두사를 붙여 출력해야 합니다.LoggerFactory.lua: 이곳에서 팩토리 패턴이 완성됩니다! 문자열 인수를 받는createLogger(loggerType)함수를 만듭니다. 타입이"console"이면 새로운 ConsoleLogger를 반환합니다. 타입이"file"이면 새로운 FileLogger를 반환합니다. 팩토리는 어떤 클래스를 인스턴스화할지에 대한 모든 세부 사항을 처리합니다.main.lua: LoggerFactory 모듈을 불러옵니다(require). 로거 타입과 로깅할 메시지라는 두 개의 입력을 읽습니다. 팩토리를 사용하여 적절한 로거를 생성한 다음, 해당 로거의:log()메서드를 메시지와 함께 호출합니다.
이 디자인의 우아함은 메인 코드가 오직 팩토리와만 상호작용한다는 점에 있습니다. ConsoleLogger나 FileLogger에 대해 직접 알 필요가 없습니다. 두 로거 모두 동일한 :log() 인터페이스를 구현하므로 서로 바꿔서 사용할 수 있습니다.
두 개의 입력을 받게 됩니다:
- 로거 타입 (
"console"또는"file") - 로깅할 메시지
예를 들어, 입력이 console과 Application started라면 출력은 다음과 같아야 합니다:
[CONSOLE] Application started입력이 file과 Saving user data...라면 출력은 다음과 같아야 합니다:
[FILE] Saving user data...직접 해보기
-- main.lua
-- 로깅 시스템의 메인 진입점
local LoggerFactory = require('LoggerFactory')
-- 입력 읽기
local loggerType = io.read()
local message = io.read()
-- TODO: LoggerFactory를 사용하여 적절한 로거를 생성하세요
-- 그런 다음 메시지와 함께 :log() 메서드를 호출하세요