Menu
Coddy logo textTech

요약 - 로거 팩토리

Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 66번째.

challenge icon

챌린지

쉬움

팩토리 패턴을 사용하여 로깅 시스템을 구축해 봅시다! 공통 인터페이스를 공유하는 다양한 유형의 로거를 만든 다음, 간단한 문자열 인수를 기반으로 적절한 로거를 생성하는 팩토리 함수를 사용하게 됩니다.

코드는 다음 네 개의 파일로 구성됩니다:

  • 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() 인터페이스를 구현하므로 서로 바꿔서 사용할 수 있습니다.

두 개의 입력을 받게 됩니다:

  1. 로거 타입 ("console" 또는 "file")
  2. 로깅할 메시지

예를 들어, 입력이 consoleApplication started라면 출력은 다음과 같아야 합니다:

[CONSOLE] Application started

입력이 fileSaving user data...라면 출력은 다음과 같아야 합니다:

[FILE] Saving user data...

직접 해보기

-- main.lua
-- 로깅 시스템의 메인 진입점

local LoggerFactory = require('LoggerFactory')

-- 입력 읽기
local loggerType = io.read()
local message = io.read()

-- TODO: LoggerFactory를 사용하여 적절한 로거를 생성하세요
-- 그런 다음 메시지와 함께 :log() 메서드를 호출하세요

Object Oriented Programming의 모든 레슨