Menu
Coddy logo textTech

코루틴 상태 확인하기

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" (종료됨)
challenge icon

챌린지

쉬움

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
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨