0Pricing
Lua Academy · 강의

제네릭 for와 break

pairs/ipairs와 함께 제네릭 for를 사용하고 break로 반복 흐름을 제어합니다.

제네릭 for와 break은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

일반 for 프로토콜

Lua의 일반 for 반복문은 반복자 함수와 함께 작동합니다. 문법은 for vars in iter_func, state, init do입니다. 각 반복에서 Lua는 iter_func(state, lastVar)를 호출하고, 반환값을 vars에 대입합니다. 첫 번째 반환값이 nil이면 반복문이 종료됩니다.

-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil)   -- first entry
while key ~= nil do
  print(key, val)
  key, val = next(t, key)       -- advance
end

모든 키에 pairs() 사용하기

pairs(t)는 문자열 키, 정수 키, 혼합 키를 포함하여 테이블의 모든 키-값 쌍을 순회하는 반복자를 반환합니다. 정수가 아닌 키의 순회 순서는 지정되지 않습니다(해시 순서). 배열 부분과 해시 부분이 모두 포함됩니다.

local config = {
  host = "localhost",
  port = 8080,
  debug = true,
  [1] = "first",
}

for key, value in pairs(config) do
  print(key, value)
end
-- Prints all 4 entries in any order

배열 키에 ipairs() 사용하기

ipairs(t)는 1부터 시작하는 정수 키를 순회하며, 첫 번째 nil 값에서 멈춥니다. 안전하고 예측 가능하며 순서를 유지합니다. 순서가 중요하고 첫 번째 빈 위치에서 중단하려는 배열 형태의 테이블에는 ipairs를 사용하십시오.

local fruits = {"apple", "banana", "cherry"}

for i, fruit in ipairs(fruits) do
  print(i, fruit)
end
-- 1  apple
-- 2  banana
-- 3  cherry

-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
  print(i, v)  -- only 1,10 and 2,20
end

pairs와 ipairs 비교

각각 언제 사용하는지 알아두십시오. ipairs는 순서가 있는 연속 배열에 사용하고, pairs는 사전이나 혼합 테이블에 사용합니다. ipairs는 첫 번째 nil 빈 위치에서 멈추지만, pairs는 nil이 아닌 모든 키를 방문합니다. 순수한 배열에는 ipairs가 더 관용적입니다.

local mixed = {10, 20, key="val", 30}

-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
  print(i, v)  -- 1:10, 2:20, 3:30
end

-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
  print(k, v)  -- 1:10, 2:20, 3:30, key:val
end

클로저로 사용자 지정 반복자 만들기

클로저를 사용하여 자신만의 반복자를 작성할 수 있습니다. 팩토리 함수는 호출할 때마다 위치를 이동하는 상태 저장 클로저를 반환합니다. 반환할 항목이 더 이상 없으면 nil을 반환하여 일반 for 반복문을 종료합니다.

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end

for n in range(1, 10, 2) do
  io.write(n .. " ")
end
print()  -- 1 3 5 7 9

반복자로 string.gmatch 사용하기

string.gmatch(s, pattern)은 문자열 s에서 패턴과 일치하는 모든 항목을 순회하는 반복자를 반환합니다. 문자열을 나누거나, 토큰을 추출하거나, 패턴이 나타나는 모든 위치를 찾을 때 흔히 사용합니다.

local sentence = "the quick brown fox"

for word in string.gmatch(sentence, "%a+") do
  print(word)
end
-- the
-- quick
-- brown
-- fox

일반 for에서 break 사용하기

break를 사용하면 일반 for 반복문을 일찍 종료할 수 있습니다. 이는 검색에 유용합니다. 일치하는 항목을 찾을 때까지 순회한 다음 break로 빠져나오면 됩니다. break 후에는 실행이 end 다음에 있는 문장에서 계속됩니다.

local inventory = {
  {name="sword", damage=50},
  {name="shield", armor=30},
  {name="bow", damage=35},
}

local target = "shield"
for i, item in ipairs(inventory) do
  if item.name == target then
    print("Found at index", i)
    break
  end
end

순회 중 테이블 수정하기

pairs()로 순회하는 동안 테이블에 키를 삽입하거나 삭제하지 마십시오. 동작이 정의되지 않기 때문입니다(일부 변경 사항은 반영되고 다른 변경 사항은 건너뛸 수 있습니다). 테이블을 수정해야 한다면 임시 목록에 변경 사항을 모은 후 반복문이 끝난 다음 적용하십시오.

local t = {a=1, b=2, c=3, d=4}
local toDelete = {}

-- Collect keys to delete
for k, v in pairs(t) do
  if v % 2 == 0 then
    toDelete[#toDelete+1] = k
  end
end

-- Delete after iteration
for _, k in ipairs(toDelete) do
  t[k] = nil
end
-- t = {a=1, c=3}

열거 패턴

인덱스와 값을 모두 사용해야 한다면 둘 다 제공하는 ipairs를 사용하십시오. 값만 필요하고 인덱스는 중요하지 않다면 인덱스에 관례적인 “사용하지 않는 변수” 이름인 _를 사용할 수 있습니다.

local colors = {"red", "green", "blue"}

-- With index
for i, color in ipairs(colors) do
  print(i .. ": " .. color)
end

-- Ignore index with _
for _, color in ipairs(colors) do
  print(color)  -- just the values
end

next() 직접 사용하기

next(t, key)는 내부에서 순회에 사용하는 함수입니다. key 다음의 키-값 쌍을 반환하며, 더 이상 없으면 nil을 반환합니다. next(t, nil)은 첫 번째 항목을 제공합니다. next(t) ~= nil을 사용하면 테이블이 비어 있지 않은지 확인할 수 있으며, 항목을 세는 것보다 빠릅니다.

local function isEmpty(t)
  return next(t) == nil
end

print(isEmpty({}))       -- true
print(isEmpty({1,2,3}))  -- false
print(isEmpty({a=1}))    -- false

빠른 확인

테이블의 첫 번째 nil 빈 위치에서 멈추는 반복자는 무엇입니까?

복습: 일반 for와 break

요약:

  • pairs(t) — 모든 키를 순서와 관계없이 순회합니다
  • ipairs(t) — 정수 키 1..n을 순서대로 순회하며 nil에서 멈춥니다
  • 사용자 지정 반복자: 중단을 위해 nil을 반환하는 클로저를 반환합니다
  • break는 반복문을 일찍 종료합니다
  • pairs로 순회하는 중에는 테이블을 수정하지 마십시오. 변경 사항을 모아 나중에 적용하십시오
  • next(t) == nil — 빠르게 비어 있는지 확인합니다

자주 묻는 질문

“제네릭 for와 break” 강의는 무료인가요?

네 — “제네릭 for와 break” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“제네릭 for와 break”에서 뭘 배우나요?

pairs/ipairs와 함께 제네릭 for를 사용하고 break로 반복 흐름을 제어합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“제네릭 for와 break” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. if, elseif 및 else 문
  2. while 및 repeat-until 반복문
  3. 숫자형 for 반복문
  4. 제네릭 for와 break
← Lua Academy(으)로 돌아가기