제어 구조

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

제어 구조는 Luau 코드 실행 흐름을 관리하는 명령문입니다. 제어 구조에는 네 가지 주요 유형이 있습니다:

  • if then else 문은 특정 조건이 true인 경우에만 코드를 실행합니다. 코드 실행은 반복되지 않습니다.
  • while 루프는 특정 조건이 true인 경우에만 코드를 실행하고, 조건이 true인 동안 실행을 반복합니다.
  • repeat 루프는 코드를 실행하고, 조건이 true인 경우에 반복 실행합니다.
  • for 루프는 지정된 입력에 따라 정해진 횟수만큼 코드를 실행합니다.

if 문, while 루프, 그리고 repeat 루프의 조건은 모든 Luau 표현식이나 값이 될 수 있습니다. 값이 false 또는 nil이 아니라면, Luau는 그것을 조건문에서 true로 평가합니다. 다른 스크립팅 언어와 달리 Luau는 0과 빈 문자열을 true로 간주합니다.

If 문

기본 if 문은 조건을 테스트합니다. 조건이 참이면, Luau는 thenend 사이의 코드를 실행합니다.

if 조건이 false인 경우 추가 조건을 테스트하기 위해 elseif 문을 사용할 수 있습니다. 모든 ifelseif 조건이 실패할 경우 코드를 실행하기 위해 else 문을 사용할 수 있습니다. elseifelse 부분은 모두 선택 사항이지만, 초기 if 문 없이는 사용할 수 없습니다.

if, elseif, 및 else 조건의 체인에서, Luau는 위에서 아래로 조건을 테스트하고, 첫 번째 true 조건에서 멈추며 그 뒤에 있는 코드를 실행합니다.


if 2 + 2 == 5 then
print("2 더하기 2는 5입니다") -- 조건이 false이므로 출력되지 않습니다.
elseif 2 + 3 == 5 then
print("2 더하기 3은 5입니다") -- 2 더하기 3은 5입니다
else
print("모든 조건이 실패했습니다") -- 이전 조건이 true이므로 출력되지 않습니다.
end

While 루프

whiledo 루프는 특정 조건이 참인지 거짓인지 평가합니다. 조건이 false이거나 nil인 경우 루프는 종료되며 Luau는 루프의 코드를 건너뜁니다. 조건이 true인 경우 Luau는 루프의 코드를 실행하고 과정을 반복합니다.


local timeRemaining = 10
while timeRemaining > 0 do
print("남은 초: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("타이머가 0에 도달했습니다!")
--[[ 결과 출력:
남은 초: 10
남은 초: 9
남은 초: 8
남은 초: 7
남은 초: 6
남은 초: 5
남은 초: 4
남은 초: 3
남은 초: 2
남은 초: 1
타이머가 0에 도달했습니다!
]]

무한 루프

조건으로 true를 설정하여 whiledo 루프를 사용하여 무한 게임 루프를 작성할 수 있습니다.


while true do
print("루프 중...")
task.wait(0.5)
end
--[[ 결과 출력:
루프 중...
루프 중...
루프 중...
루프 중...
...
]]

Repeat 루프

repeatuntil 루프는 조건이 참이 될 때까지 반복합니다. 조건 테스트는 코드 블록이 실행된 후에 평가되므로, 코드 블록은 항상 최소한 한 번은 실행됩니다. 다른 언어와 달리 repeatuntil 루프 안에 선언된 지역 변수의 Luau 범위는 조건을 포함합니다.


local currentGoblinCount = 18
-- 게임에서 최대 25마리의 고블린을 생성함
repeat
spawnGoblin()
currentGoblinCount += 1
print("현재 고블린 수: " .. currentGoblinCount)
until currentGoblinCount == 25
print("고블린이 재생산되었습니다!")
--[[ 결과 출력:
현재 고블린 수: 19
현재 고블린 수: 20
현재 고블린 수: 21
현재 고블린 수: 22
현재 고블린 수: 23
현재 고블린 수: 24
현재 고블린 수: 25
고블린이 재생산되었습니다!
]]

For 루프

for 루프는 코드 실행 횟수를 정해진 횟수만큼 실행합니다. 이는 숫자 카운터에 기반할 수도 있고, 컬렉션의 항목 수에 기반할 수도 있습니다.

숫자 for 루프

fordo 루프는 카운터를 사용하여 루프를 실행할 횟수를 결정합니다. 루프는 시작 값, 종료 값 및 선택적 증가 값으로 선언됩니다.

Luau는 카운터를 시작 값으로 설정하고, for 루프 내의 코드 블록을 실행한 다음 증가 값을 카운터에 더합니다. 증가 값이 양수이면, 카운터가 종료 값보다 같거나 클 때까지 이 과정이 반복됩니다. 증가 값이 음수이면, 카운터가 종료 값보다 같거나 작을 때까지 이 과정이 반복됩니다.

선택적 증가는 기본적으로 1로 설정되어 있습니다. 반드시 정수일 필요는 없습니다.


for counter = 1, 3 do
print(counter)
end
--[[ 결과 출력:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ 결과 출력:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ 결과 출력:
2
1.5
1
0.5
0
]]

일반 for 루프

일반 for 루프는 숫자 시퀀스 대신 컬렉션의 항목을 반복합니다. 일반 for 루프를 사용하면 컬렉션의 각 항목에 대해 코드를 실행할 수 있으며, 각 항목을 코드에서 쉽게 사용할 수 있습니다.

for 루프는 다양한 종류의 컬렉션을 반복하기 위해 함수나 반복자를 필요로 합니다. 전역 ipairs()는 배열에 대한 반복자를 반환하고, 전역 pairs()는 딕셔너리에 대한 반복자를 반환합니다. string 라이브러리는 문자열을 반복하기 위해 string.gmatch()를 제공합니다.

일반화된 반복

Luau에서는 in 키워드를 사용하여 반복자 함수를 사용하지 않고 테이블에서 직접 반복할 수 있습니다:


for i, v in {1, 2, 3, 4, 5} do
print(i, v)
end

일반화된 반복은 또한 __iter 메타메서드를 사용하여 사용자 정의 반복자 함수를 만들 수 있게 해줍니다. 이 인위적인 예제는 배열의 마지막 요소에서 첫 번째 요소로 역순으로 반복합니다:


local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ 결과 출력:
5 5
4 4
3 3
2 2
1 1
]]

배열

ipairs() 함수는 테이블의 숫자 인덱스를 반복하고 각 요소에 대해 indexvalue를 반환하는 반복자를 반환합니다. 이는 모든 인덱스가 숫자인 배열에 적합합니다.


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ 결과 출력:
1 a
2 b
3 c
4 d
5 e
]]

딕셔너리

pairs() 함수는 테이블의 모든 인덱스(숫자 인덱스 포함)를 반복하고 딕셔너리의 각 항목에 대해 keyvalue를 반환하는 반복자를 반환합니다. 딕셔너리 테이블의 요소를 순회하는 순서는 임의적입니다. 이는 비순서적 비숫자 인덱스를 가진 항목을 반복하는 데 적합합니다.


local dictionary = {
[1] = "a",
["Hello"] = "b",
[5] = "c",
[true] = "d",
["World"] = "f",
[false] = "e"
}
for key, value in pairs(dictionary) do
print(key, value)
end
--[[ 결과 출력:
Hello b
true d
false e
World f
5 c
1 a
]]

루프 종료

루프를 강제로 종료하려면 break 키워드를 사용합니다. 다음 코드 샘플은 무한 whiledo 루프를 종료하는 방법을 보여줍니다.


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("경과된 초:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("5초가 경과했습니다. 진행할 시간입니다!")
--[[ 결과 출력:
1
2
3
4
5
5초가 경과했습니다. 진행할 시간입니다!
]]

루프 계속하기

루프를 반복하고 다시 시작하려면 continue 키워드를 사용합니다. for 루프는 카운터를 반복하고; whilerepeatuntil 루프는 계속하기 전에 루프 조건을 확인합니다. 다음 코드 샘플은 특정 ClassNameInstance 자식들을 모두 가져옵니다.


local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- 루프를 반복합니다.
table.insert(children, child)
end
return children
end
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.