Menu
Coddy logo textTech

요약 - 로거 팩토리

Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 66번째.

challenge icon

챌린지

쉬움

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를 받습니다:

  1. Logger type ("console" 또는 "file" 중 하나)
  2. 기록할 message

예를 들어 inputs가 consoleApplication started라면 output은 다음과 같아야 합니다:

[CONSOLE] Application started

inputs가 fileSaving 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 컴파일러