테이블

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

테이블 데이터 유형은 불린, 숫자, 문자열, 함수 및 기타 테이블을 포함하여 nil이 아닌 모든 유형의 여러 값을 저장할 수 있습니다. 중괄호({})를 사용하여 테이블을 생성합니다:


-- 변수 "t"에 할당된 빈 테이블 생성
local t = {}
print(t) -- {}

테이블을 배열 또는 사전으로 사용할 수 있습니다. 배열은 숫자의 정렬된 목록을 인덱스로 사용하지만, 사전은 숫자, 문자열 및 객체를 인덱스로 가질 수 있습니다.

테이블 작업을 위한 내장 함수에 대한 자세한 내용은 table 라이브러리를 참조하세요.

배열

배열은 값의 정렬된 목록입니다. 배열은 특별한 권한을 가진 플레이어 그룹과 같이 데이터의 컬렉션을 저장하는 데 유용합니다.

배열 생성하기

Luau 테이블을 사용하여 배열을 만들려면 값들을 순차적으로 선언하고 쉼표로 구분합니다.


-- 세 개의 항목으로 배열 생성
local testArray = {"문자열", 3.14159, true}
print(testArray)

배열에서 읽기

배열에서 읽으려면 참조 뒤에 대괄호 쌍을 추가하고 요소의 인덱스 번호를 지정합니다 ([pos]):


-- 세 개의 항목으로 배열 생성
local testArray = {"문자열", 3.14159, true}
print(testArray[1]) -- 문자열
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

배열에 쓰기

인덱스에서 배열의 값을 정의하거나 재작성하려면 대괄호([]) 뒤에 인덱스 번호를 선언하고 =와 값을 추가합니다:


local testArray = {"문자열", 3.14159, true}
testArray[2] = 12345
testArray[4] = "새 문자열"
print(testArray[2]) -- 12345
print(testArray[4]) -- 새 문자열

배열 반복하기

배열을 반복하려면 for 루프를 사용할 수 있습니다. 배열이 숫자 인덱스를 가지므로, 배열의 길이(#array)까지 숫자 for 루프를 사용할 수도 있습니다.


local testArray = {"문자열", 3.14159, true, "새 문자열"}
-- 일반 반복 사용
for index, value in testArray do
print(index, value)
end
-- 배열 길이 연산자 (#)를 사용하여 반복
for index = 1, #testArray do
print(index, testArray[index])
end

항목 삽입하기

배열 에 항목을 삽입하는 두 가지 내장 방법이 있습니다:

  • 배열에 대한 참조와 항목 값을 Luau의 table.insert() 함수에 전달합니다.
  • 새 항목을 array[#array+1] 구문을 사용하여 배열에 추가합니다.

local testArray = {"문자열", 3.14159}
table.insert(testArray, "새 문자열")
testArray[#testArray+1] = "또 다른 새 문자열"
print(testArray[3]) -- 새 문자열
print(testArray[4]) -- 또 다른 새 문자열

배열의 시작과 끝 사이에 항목을 삽입하려면 table.insert()의 두 번째 인수로 위치 값을 포함합니다. 이것은 새 항목을 삽입하고 이후의 항목들을 하나의 인덱스 위치로 밀어냅니다.


local testArray = {"첫 번째 항목", "다음 항목"}
table.insert(testArray, 2, "새 항목 #2")
print(testArray[1]) -- 첫 번째 항목
print(testArray[2]) -- 새 항목 #2
print(testArray[3]) -- 다음 항목

항목 제거하기

배열에서 항목을 제거하려면 table.remove()를 사용합니다. 이는 지정된 위치의 항목을 제거하고 이후의 항목들을 하나의 인덱스 위치로 이동시킵니다.


local testArray = {"첫 번째 항목", "다음 항목", "마지막 항목"}
table.remove(testArray, 2)
print(testArray[1]) -- 첫 번째 항목
print(testArray[2]) -- 마지막 항목

사전

사전은 배열의 확장입니다. 사전은 키-값 쌍 집합을 저장하며, 키는 숫자, 문자열 또는 객체일 수 있습니다.

사전 생성하기

사전 테이블을 생성하려면 각 를 정의한 후 =을 이어서 작성합니다. 각 키-값 쌍은 쉼표로 구분합니다:


local testDictionary = {
과일이름 = "레몬",
과일색상 = "노랑",
신맛 = true
}

사전의 키는 숫자, 문자열 및 객체일 수 있습니다. 예를 들어, 키는 Instance이기도 합니다. 객체를 키로 사용하려면 대괄호([]) 안에 키를 선언합니다:


local part = Instance.new("Part")
local testDictionary = {
partType = "블록",
[part] = true
}

사전에서 읽기

사전에서 읽으려면 참조 뒤에 대괄호 쌍을 추가하고 키 이름을 지정합니다. 문자열 키를 직접 참조하려면 (["key"]) 또는 (.key)를 사용하거나, 변수 값을 사용할 수 있습니다 ([key]).


local part = Instance.new("Part")
local testDictionary = {
partType = "블록",
[part] = true
}
-- 문자열 키에 대해 따옴표 포함
print(testDictionary["partType"]) -- 블록
-- 빈 공간 없는 문자열 키에 점(.)을 사용하여 인덱싱
print(testDictionary.partType) -- 블록
-- 비문자열 키에 대해 따옴표 생략
print(testDictionary[part]) -- true

사전에 쓰기

새로운 또는 기존 사전 키의 값을 정의하거나 재작성하려면 대괄호([])에 키 이름을 선언하거나, 키가 문자열인 경우, (.key) 뒤에 =와 값을 추가합니다:


local testDictionary = {
과일이름 = "레몬",
신맛 = true
}
-- 기존 키의 값 변경
testDictionary["과일이름"] = "체리"
testDictionary.신맛 = false
-- 새로운 키-값 쌍 추가
testDictionary.과일개수 = 10
print(testDictionary.과일이름) -- 체리
print(testDictionary.신맛) -- false
print(testDictionary.과일개수) -- 10

사전 반복하기

사전을 반복하려면 for 루프를 사용합니다:


local testDictionary = {
과일이름 = "레몬",
과일색상 = "노랑",
신맛 = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ 결과 출력:
과일이름 레몬
신맛 true
과일색상 노랑
]]

키-값 쌍 제거하기

사전에서 키-값 쌍을 제거하려면 해당 키의 값을 nil로 설정합니다.


local testDictionary = {
과일이름 = "레몬",
과일색상 = "노랑",
신맛 = true
}
testDictionary.신맛 = nil
for key, value in testDictionary do
print(key, value)
end
--[[ 결과 출력:
과일이름 레몬
과일색상 노랑
]]

테이블을 참조로 사용하기

변수에 테이블을 저장하면, Luau는 해당 테이블의 복사본을 생성하지 않습니다. 대신, 변수는 원래 테이블에 대한 참조, 또는 포인터가 됩니다. 테이블에 대한 모든 참조는 원래 테이블에 대한 모든 변경 사항을 반영합니다:


local originalArray = {10, 20}
local arrayReference = originalArray
print("원본:", originalArray[1], originalArray[2])
print("참조:", arrayReference[1], arrayReference[2])
-- 원본 배열에서 값 변경
originalArray[1] = 1000
originalArray[2] = 2000
print("참조:", arrayReference[1], arrayReference[2])
--[[ 결과 출력:
원본: 10 20
참조: 10 20
참조: 1000 2000
]]

테이블 복제하기

얕은 복제

중첩된 테이블 없이 테이블을 복사하려면, Luau는 table.clone() 메서드를 제공합니다.


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

깊은 복제

더 복잡한 테이블을 복사하려면, 다음과 유사한 재귀 함수를 사용해야 합니다:


-- 테이블의 깊은 복제를 위한 함수
local function deepClone(original)
-- 복제를 위한 새로운 테이블 정의
local clone = table.clone(original)
-- 원본 테이블을 반복하여 테이블 값을 확인
-- 값으로서 테이블이 발견되면, 키(인덱스)로 깊게 복제합니다
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- 깊은 복제된 테이블의 최종 복제를 반환
return clone
end

함수가 준비되면, 다음과 같이 깊은 복사를 수행할 수 있습니다:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepClone(original)

테이블 동결하기

테이블을 동결하면 읽기 전용이 되어, 변경하고 싶지 않은 상수 값을 만드는 데 유용합니다. 동결은 영구적입니다; "해동"이나 "해제" 메서드가 없습니다. 테이블이 동결되어 있는지 확인하려면 table.isfrozen()을 사용합니다.

얕은 동결

중첩된 테이블 없이 테이블을 동결하려면, Luau는 table.freeze() 메서드를 제공합니다.


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> 읽기 전용 테이블 수정 시도

깊은 동결

중첩된 테이블이 있는 더 복잡한 테이블을 동결하려면, 다음과 유사한 재귀 함수를 사용합니다:


local function deepFreeze(target)
-- 테이블을 얕게 동결합니다
table.freeze(target)
-- 테이블의 각 키를 확인하고 테이블이면 동결합니다
for _, value in target do
-- 값이 동결되지 않았는지 확인합니다; 이미 동결되어 있다면 오류가 발생합니다
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end

함수가 준비되면, 다음과 같이 테이블을 깊게 동결할 수 있습니다:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> 읽기 전용 테이블 수정 시도
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.