코루틴 상태 확인하기
Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 52번째.
코루틴을 사용하다 보면 코루틴이 어떤 상태인지 알아야 할 때가 많습니다. 현재 실행 중인가요? 일시 중지되어 재개되기를 기다리고 있나요? 실행을 마쳤나요?
Lua는 이러한 질문에 답하기 위해 coroutine.status() 함수를 제공합니다.
coroutine.status() 함수는 코루틴을 인자로 받아 현재 상태를 설명하는 문자열을 반환합니다. 세 가지 가능한 상태가 있습니다:
| "suspended" | 코루틴이 yield()에서 일시 중지되었으며 다시 재개될 수 있습니다. |
| "running" | 코루틴이 현재 실행 중입니다. |
| "dead" | 코루틴이 실행을 마쳤으며 다시 재개될 수 없습니다. |
사용 방법은 다음과 같습니다:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended" (yield에서 일시 중단됨)
coroutine.resume(co)
print(coroutine.status(co)) -- "dead" (종료됨)챌린지
쉬움resumeCount를 매개변수로 받아 코루틴의 생명주기 중 서로 다른 시점에서의 상태를 보여주는 문자열을 반환하는 checkCoroutineLifecycle 함수를 작성하세요.
한 번 yield한 후 완료되는 코루틴을 생성하세요. 생성 직후, 첫 번째 resume 후(yield에서 일시 중단되었을 때), 그리고 resumeCount에 따른 후속 resume 이후의 상태를 확인하고 기록하세요.
로직:
"paused"문자열을 한 번 yield한 후 완료되는 함수를 생성합니다.coroutine.create()를 사용하여 이 함수를 코루틴으로 감쌉니다.- 생성 직후
coroutine.status()를 사용하여 상태를 확인합니다. - 코루틴을 한 번 resume하고 상태를 다시 확인합니다.
resumeCount - 1만큼 코루틴을 추가로 resume합니다 (총 resume 횟수 = resumeCount).- 모든 resume이 끝난 후 최종 상태를 확인합니다.
- 세 가지 상태를 모두 포함하는 문자열을 다음 형식으로 반환합니다:
initial: [status]\\nafter first resume: [status]\\nfinal: [status]
매개변수:
resumeCount(number): 코루틴을 resume할 총 횟수 (최소 1)
반환값: 코루틴 생명주기의 세 시점에서의 상태를 보여주는 문자열 (string). 형식: initial: suspended\nafter first resume: suspended\nfinal: dead
치트 시트
coroutine.status() 함수는 코루틴의 현재 상태를 문자열로 반환합니다.
가능한 상태:
"suspended"- 코루틴이yield()에서 일시 중지되었으며 다시 시작할 수 있는 상태입니다."running"- 코루틴이 현재 실행 중인 상태입니다."dead"- 코루틴이 실행을 마쳤으며 다시 시작할 수 없는 상태입니다.
사용법:
coroutine.status(coroutine_object)예제:
function task()
coroutine.yield()
print("Finishing")
end
local co = coroutine.create(task)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "suspended"
coroutine.resume(co)
print(coroutine.status(co)) -- "dead"직접 해보기
function checkCoroutineLifecycle(resumeCount)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.