요약 - 사용자 관리자
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 68번째.
챌린지
쉬움많은 실제 프로그램에서 볼 수 있는 실용적인 애플리케이션인 사용자 관리 시스템을 구축해 봅시다! 개별 사용자를 나타내는 클래스와 이들의 컬렉션을 효율적으로 관리하는 클래스, 이렇게 함께 작동하는 두 개의 클래스를 만들게 됩니다.
코드는 세 개의 파일로 구성됩니다:
User.lua: 시스템의 단일 사용자를 나타내는 User 클래스를 생성합니다. 각 사용자는id와name을 가집니다."ID: {id}, Name: {name}"형식의 문자열을 반환하는:getInfo()메서드를 포함하세요.UserManager.lua: 사용자 컬렉션을 처리하는 관리자 클래스를 구축합니다. 효율적인 조회를 위해 사용자를 저장하는 방법을 생각해 보세요. 사용자의 ID를 테이블 키로 사용하면 리스트를 검색하는 것보다 사용자를 찾고 삭제하는 것이 훨씬 간단해집니다. 관리자에게는 다음이 필요합니다::addUser(user)— 컬렉션에 User 객체를 추가합니다.:removeUser(id)— ID로 사용자를 삭제합니다.:findUser(id)— 일치하는 ID를 가진 User를 반환하거나, 찾지 못한 경우nil을 반환합니다.:listUsers()— 모든 사용자의 정보를 한 줄에 하나씩 출력합니다.
main.lua: 모든 것을 하나로 합칩니다! UserManager를 생성하고, 받은 입력에 따라 사용자를 추가하고, 작업을 수행한 후 결과를 표시합니다.
다섯 개의 입력을 받게 됩니다:
- 첫 번째 사용자의 ID (숫자)
- 첫 번째 사용자의 이름
- 두 번째 사용자의 ID (숫자)
- 두 번째 사용자의 이름
- 검색할 사용자의 ID (숫자)
메인 파일에서 다음을 수행하세요:
- UserManager를 생성하고 두 사용자 모두 추가합니다.
:listUsers()를 호출하여 모든 사용자를 출력합니다.- 첫 번째 사용자(첫 번째 ID 사용)를 삭제합니다.
"After removal:"를 출력합니다.:listUsers()를 다시 호출합니다.- 다섯 번째 입력 ID로 사용자를 검색합니다. 찾은 경우 해당 정보를 출력하고, 찾지 못한 경우
"User not found"를 출력합니다.
예를 들어, 입력이 101, Alice, 102, Bob, 102인 경우 출력은 다음과 같아야 합니다:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bob입력이 201, Charlie, 202, Diana, 201인 경우 출력은 다음과 같아야 합니다:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not found두 번째 예시에서 사용자 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: "After removal:" 출력
-- TODO: listUsers() 다시 호출
-- TODO: searchId로 사용자 검색
-- 찾은 경우 해당 정보를 출력하고, 찾지 못한 경우 "User not found" 출력