코루틴 기반 생성기
coroutine.wrap으로 지연 생성 시퀀스를 만듭니다.
코루틴 기반 생성기은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
코루틴 생성기를 사용하는 이유
클로저는 단순한 생성자에 적합합니다. 하지만 생성 로직에 중첩 반복문이나 복잡한 제어 흐름이 필요하다면 코루틴 생성기가 훨씬 깔끔합니다.
coroutine.wrap 기초
coroutine.wrap(fn)은 함수를 반환합니다. 호출할 때마다 코루틴이 재개되며, coroutine.yield를 통해 반환된 값이 반환 값이 됩니다.
local gen = coroutine.wrap(function()
coroutine.yield(1)
coroutine.yield(2)
coroutine.yield(3)
end)
for v in gen do print(v) end무한 수열 생성기
코루틴은 값을 무한히 반환할 수 있으므로, 호출자가 break로 종료하는 무한 수열에 적합합니다.
local function naturals()
return coroutine.wrap(function()
local n = 0
while true do
n = n + 1
coroutine.yield(n)
end
end)
end
for v in naturals() do
if v > 5 then break end
print(v)
end트리 순회 생성기
코루틴을 사용하면 재귀적인 깊이 우선 순회가 간단해집니다. 명시적인 스택을 관리하지 않고 재귀 호출에서 바로 값을 반환하면 됩니다.
local function walkTree(node)
return coroutine.wrap(function()
local function recurse(n)
coroutine.yield(n.value)
for _, child in ipairs(n.children or {}) do
recurse(child)
end
end
recurse(node)
end)
end피보나치 생성기
피보나치 수열은 코루틴으로 자연스럽게 표현할 수 있습니다. 두 개의 상태 변수를 유지하면서 각 항을 반환하면 됩니다.
local function fibs()
return coroutine.wrap(function()
local a, b = 0, 1
while true do
coroutine.yield(a)
a, b = b, a + b
end
end)
end
local fib = fibs()
for i = 1, 8 do print(fib()) end생성기에 값 전달하기
재개된 함수에 전달한 인수는 yield의 반환 값이 되므로 양방향 통신이 가능합니다.
local acc = coroutine.wrap(function()
local total = 0
while true do
local n = coroutine.yield(total)
total = total + (n or 0)
end
end)
acc() -- start
print(acc(10)) -- 10
print(acc(5)) -- 15coroutine.wrap과 coroutine.create 비교
wrap은 더 간단하지만 오류가 발생하면 예외를 던집니다. create는 스레드 객체를 반환하며, resume의 반환 값으로 오류를 직접 처리할 수 있습니다.
생성기 파이프라인
코루틴 기반 생성기를 연결하여 지연 파이프라인을 구성하십시오. 생산자는 원시 데이터를 반환하고, 필터는 일치하는 항목을 반환하며, 매핑 단계는 변환된 항목을 반환합니다.
오류 전파
감싼 코루틴에서 오류가 발생하면 감싸는 함수에서도 오류가 발생합니다. 안전하게 사용하려면 생성기 호출을 pcall로 감싸십시오.
메모리 효율성
코루틴 생성기는 지연 방식으로 작동하므로 값이 필요할 때 계산합니다. 따라서 큰 중간 테이블을 만들 필요가 없으며, 이는 대규모 데이터 집합에서 큰 장점입니다.
소진 처리
코루틴 함수가 값을 반환하고 값을 양보하지 않으면, 감싼 함수에 대한 다음 호출은 nil을 반환합니다. 따라서 일반적인 for 반복문이 자연스럽게 종료됩니다.
코루틴 생성기 질문
coroutine.wrap 기반 생성기의 코루틴 함수가 값을 양보하지 않고 반환하면 어떻게 됩니까?
복습: 코루틴 생성기
coroutine.wrap은 모든 코루틴을 재사용 가능한 생성기 함수로 변환합니다. 이를 통해 제어 흐름을 깔끔하게 유지하면서 지연 방식의 무한 수열, 재귀 순회, 파이프라인 단계를 구현할 수 있습니다.
자주 묻는 질문
“코루틴 기반 생성기” 강의는 무료인가요?
네 — “코루틴 기반 생성기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“코루틴 기반 생성기”에서 뭘 배우나요?
coroutine.wrap으로 지연 생성 시퀀스를 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“코루틴 기반 생성기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 제네릭 for 프로토콜
- 무상태 반복자
- 클로저를 이용한 상태 저장 반복자
- 코루틴 기반 생성기