Menu
Coddy logo textTech

요약 - 사용자 관리자

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

challenge icon

챌린지

쉬움

사용자 관리 시스템을 만들어 봅시다. 실제 프로그램에서 흔히 볼 수 있는 실용적인 애플리케이션입니다! 함께 작동하는 두 개의 클래스를 만들게 됩니다. 하나는 개별 사용자를 나타내고, 다른 하나는 사용자의 collection을 효율적으로 관리합니다.

코드를 세 개의 파일로 구성합니다.

  • User.lua: 시스템의 단일 사용자를 나타내는 User 클래스를 Create합니다. 각 사용자는 idname을 가집니다. :getInfo() 메서드를 포함하고, "ID: {id}, Name: {name}" 형식의 문자열을 반환하도록 합니다.
  • UserManager.lua: 사용자 collection을 처리하는 manager 클래스를 만듭니다. 효율적인 lookup을 위해 사용자를 어떻게 저장할지 생각해 보세요. 사용자의 ID를 테이블 key로 사용하면 list에서 검색하는 것보다 사용자를 찾고 제거하는 일이 훨씬 간단해집니다. manager에는 다음이 필요합니다.
    • :addUser(user): User object를 collection에 추가합니다.
    • :removeUser(id): ID로 사용자를 제거합니다.
    • :findUser(id): matching ID를 가진 User를 반환하거나, 찾지 못하면 nil을 반환합니다.
    • :listUsers(): 모든 사용자의 info를 한 line에 하나씩 Print합니다.
  • main.lua: everything을 하나로 합칩니다! UserManager를 Create하고, 받은 inputs를 바탕으로 사용자를 추가하고, 작업을 수행한 다음 결과를 표시합니다.

다섯 개의 inputs를 받습니다.

  1. 첫 번째 사용자의 ID(숫자)
  2. 첫 번째 사용자의 name
  3. 두 번째 사용자의 ID(숫자)
  4. 두 번째 사용자의 name
  5. 검색할 사용자의 ID(숫자)

main 파일에서 다음을 수행합니다.

  1. UserManager를 Create하고 both 사용자를 추가합니다.
  2. :listUsers()를 Call하여 모든 사용자를 Print합니다.
  3. 첫 번째 사용자를 제거합니다(첫 번째 ID 사용).
  4. "After removal:"을 Print합니다.
  5. :listUsers()를 다시 Call합니다.
  6. 다섯 번째 input ID를 가진 사용자를 검색하고, found라면 해당 사용자의 info를 Print합니다. found가 아니면 "User not found"를 Print합니다.

예를 들어 inputs가 101, Alice, 102, Bob, 102라면 출력은 다음과 같아야 합니다.

ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bob

inputs가 201, Charlie, 202, Diana, 201이라면 출력은 다음과 같아야 합니다.

ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not found

두 번째 예제에서 user 201(Charlie)을 제거한 후 해당 ID를 검색하면 "User not found"가 반환됩니다. 더 이상 시스템에 없기 때문입니다!

직접 해보기

-- main.lua: 모든 것을 하나로 모으기

local User = require('User')
local UserManager = require('UserManager')

-- 입력 읽기
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())

-- TODO: UserManager 인스턴스 생성

-- TODO: 입력 데이터로 두 개의 User 객체 생성

-- TODO: 두 사용자를 매니저에 추가

-- TODO: listUsers()를 호출하여 모든 사용자 출력

-- TODO: 첫 번째 사용자 제거 (id1 사용)

-- TODO: Print "After removal:"

-- TODO: listUsers()를 다시 호출

-- TODO: searchId로 사용자 검색
-- If found, print their info; if not found, print "User not found"

객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러