안녕하세요 '코틀린 코루틴' 책을 읽으면서 공부 중인데 코루틴 내부 실제 구현 코드를 보다가 궁금한 점이 생겨 질문드립니다. suspend fun myFunction() { println("Before") var counter = 0 delay(1000) // 중단 함수 counter++ println("Counter: $counter") println("After") } 위와 같이 상태(counter) 를 보존해야하는 함수인 경우에 실제 구현이 아래처럼 된다고 나와있습니다. fun myFunction(continuation: Continuation<Unit>): Any { val continuation = continuation as? MyFunctionContinuation ?: MyFunctionContinuation(continuation) var counter = continuation.counter if (continuation.label == 0){ println("Before") counter = 0 continuation.counter = counter continuation.label = 1 if (delay(1000, continuation) == COROUTINE_SUSPENDED){ return COROUTINE_SUSPENDED } } if (continuation.label == 1){ counter = (counter as Int) + 1 println("Counter: $counter") println("After") return Unit } error("Impossible") } 여기서 궁금한 점은counter를 초기화할 때 0으로 초기화하지 않고 continuation.counter 로 초기화하는 이유가 있는지 입니다. 머릿 속으로 그려보면 var counter = 0 으로 선언하고 시작해도 원하는대로 실행이 되지 않을까.. 라고 생각됩니다.
코루틴은 비동기 작업의 효율적 처리 등을 위해 일반 함수와는 다르게 실행 상태를 일시 중단했다가 재개할 수 있습니다. 이를 위해 이 함수의 상태(변수 값, 실행 위치 등)를 저장하고 관리해야 하며, 이를 위해 Continuation 객체가 사용됩니다.질문에 나온 코드에서 var counter = continuation.counter로 초기화하는 이유는,&n...