사전으로 사용하는 테이블
문자열 키와 여러 유형의 키를 사용해 키-값 쌍을 저장합니다.
사전으로 사용하는 테이블은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
문자열 키
문자열 키를 사용하는 테이블은 사전(해시 맵)처럼 동작합니다. 유효한 식별자에는 점 표기법 t.key을 사용하고, 모든 문자열에는 대괄호 표기법 t["key"]을 사용하여 필드에 접근합니다. 두 형식은 동일하며, 대괄호 표기법은 동적으로 키를 지정할 수 있습니다.
local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"
print(user.name) -- Alice
print(user["age"]) -- 30
local field = "role"
print(user[field]) -- admin (dynamic key)테이블 리터럴
key = value 구문을 사용하는 테이블 리터럴로 사전을 초기화할 수 있습니다. 이는 Lua에서 레코드를 만드는 가장 일반적인 방법입니다. 하나의 리터럴에서 배열 형식 항목과 사전 형식 항목을 함께 사용할 수도 있습니다.
local config = {
host = "localhost",
port = 3306,
database = "myapp",
debug = false,
tags = {"web", "api"}, -- nested array
}
print(config.host) -- localhost
print(config.port) -- 3306
print(config.tags[1]) -- web사전으로 개수 세기
사전의 대표적인 활용 사례는 빈도수 세기입니다. 목록을 순회하면서 각 요소를 키로 사용하고 개수를 증가시킵니다. 증가시키기 전에 nil인지 확인해야 하므로, 초기값으로 count[word] or 0을 사용합니다.
local words = {"lua","is","fast","lua","is","lua"}
local freq = {}
for _, w in ipairs(words) do
freq[w] = (freq[w] or 0) + 1
end
for word, count in pairs(freq) do
print(word, count)
end
-- lua 3, is 2, fast 1사전으로 그룹화하기
속성별로 데이터를 그룹화하려면 목록을 순회하면서 그룹화 키를 사용해 사전의 목록에 항목을 추가합니다. 이는 SQL의 GROUP BY 또는 Python의 defaultdict 패턴에 해당하는 Lua 방식입니다.
local people = {
{name="Alice", dept="eng"},
{name="Bob", dept="hr"},
{name="Carol", dept="eng"},
{name="Dave", dept="hr"},
}
local groups = {}
for _, p in ipairs(people) do
local d = p.dept
groups[d] = groups[d] or {}
groups[d][#groups[d]+1] = p.name
end
print(table.concat(groups.eng, ", ")) -- Alice, Carol키 존재 여부 확인
키의 값을 nil과 비교하여 키가 존재하는지 검사합니다. 주의할 점은 키에 저장된 값 자체가 nil이면 해당 키가 없는 것으로 간주된다는 것입니다. 존재 여부를 나타내는 플래그에는 nil 대신 값으로 true를 저장합니다.
local cache = {result=42, mode="fast"}
if cache.result ~= nil then
print("cached:", cache.result) -- 42
end
-- Key not present:
if cache.timeout == nil then
print("no timeout set")
end
-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
print("access granted")
end키 삭제
테이블의 키에 nil을 할당하면 해당 키를 제거할 수 있습니다. 키-값 쌍이 사라지고 가비지 컬렉터가 값에 할당된 메모리를 회수할 수 있습니다. 이 방법으로 지역 변수를 삭제할 수는 없으며, 테이블 항목만 삭제할 수 있습니다.
local session = {token="abc123", user="Alice", expires=3600}
print(session.token) -- abc123
session.token = nil
print(session.token) -- nil (removed)
-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count) -- 2사전 병합
한 테이블을 순회하면서 항목을 다른 테이블에 복사하여 두 테이블을 병합합니다. 두 테이블에 같은 키가 있으면 두 번째 테이블의 값이 우선합니다. 이는 JavaScript의 Object.assign에 해당하는 Lua 방식입니다.
local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}
local function merge(base, over)
local result = {}
for k, v in pairs(base) do result[k] = v end
for k, v in pairs(over) do result[k] = v end
return result
end
local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic) -- red 12 true모든 키 형식
테이블 키에는 nil이 아니고 NaN이 아닌 모든 값을 사용할 수 있습니다. 문자열, 숫자, 불리언, 함수뿐 아니라 다른 테이블도 키가 될 수 있습니다. 정수 키와 문자열 키는 내부적으로 다르게 저장되지만, 대괄호 표기법으로 동일하게 접근합니다.
local t = {}
local function myKey() end
t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4
print(t["string"]) -- 1
print(t[42]) -- 2
print(t[true]) -- 3
print(t[myKey]) -- 4순서가 있는 순회
Lua의 pairs()는 순회 순서를 보장하지 않습니다. 정해진 순서로 순회하려면 키를 배열에 모아 정렬한 다음 순회합니다.
local scores = {Alice=95, Bob=87, Carol=91, Dave=78}
local names = {}
for name in pairs(scores) do
names[#names+1] = name
end
table.sort(names)
for _, name in ipairs(names) do
print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)기본값 패턴
유용한 패턴으로 __index 메타테이블을 통해 "defaults" 테이블에 접근하는 방법이 있습니다. 주 테이블에서 키를 찾지 못하면 Lua는 defaults 테이블에서 해당 키를 조회합니다. 이를 통해 병합하지 않고 계층적인 구성을 구현할 수 있습니다.
local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}
setmetatable(config, {__index = defaults})
print(config.timeout) -- 60 (overridden)
print(config.retries) -- 3 (from defaults)
print(config.verbose) -- false (from defaults)빠른 확인
Lua에서 테이블 t의 키 "x"를 어떻게 제거합니까?
복습: 사전으로서의 테이블
핵심 내용:
- 점 표기법과 대괄호 표기법:
t.key==t["key"] - nil이 아니고 NaN이 아닌 모든 값은 키가 될 수 있습니다
- 키를 삭제하려면 nil을 할당합니다
- 빈도수 세기:
t[k] = (t[k] or 0) + 1 - 순서가 있는 순회: 키 수집 → 정렬 → 순회
- 기본값에는 __index 메타테이블을 사용합니다
자주 묻는 질문
“사전으로 사용하는 테이블” 강의는 무료인가요?
네 — “사전으로 사용하는 테이블” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“사전으로 사용하는 테이블”에서 뭘 배우나요?
문자열 키와 여러 유형의 키를 사용해 키-값 쌍을 저장합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“사전으로 사용하는 테이블” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 배열로 사용하는 테이블
- 사전으로 사용하는 테이블
- pairs와 ipairs로 테이블 반복하기
- 중첩 테이블과 구조화된 데이터