Kotlin Coroutine 동작을 이해해보기 - Continuation 멈추고 보기
서론
이전 편과 이어서, Continuation이 만들어지는 파일을 보겠습니다.
이전 편에서, Continuation을 상속받는 Impl을 컴파일러가 만들어주고, 라벨 정보와 함께 그에 따른 결과를 가지고 있을 것이라고 추측했는데요, 디버깅을 통해 실제로 그러한지 살펴 보겠습니다.
본론
실제로 디버깅을 한 후 콜스택을 보면 볼 수 있는데요, 다음과 같이 중단점을 걸고 콜스택을 보면
아래와 같습니다.
이제 밑에부터 보면, android os 단의 콜스택은 무시하고, 코루틴 콜스택을 보면 continuation 객체에 라벨 정보와 함께 result final field 안에 정보가 담겨있습니다. 예상했던 대로군요.
이 continuation을 가지고 다시 resumeWith로 가보겠습니다.
이전에 말했던 것 처럼, BaseContinuationImpl이라는 이름으로 Continuation을 상속받은 클래스가 자동으로 생성되었고, 그 안의 this에 라벨 정보, result에 결과 정보 등 다양한 정보들이 들어있네요!
예상했던 것 처럼, 잘 동작하고 있네요!
그리고 컴파일된 코드라서 실제 구현체는 볼 수 없지만, 해당 결과 값을 들고 다시 처음으로 돌아가 ViewModel에서 값을 리턴해주고 다시 프로그램이 돌겠죠!
지금까지 코루틴의 내부 동작을 알아보았습니다. 어렵지만... 재밌으셨죠?
틀린점, 잘 모르겠는 점에 대해서 댓글 남겨주시면 같이 공부해봐요! 감사합니다.
ps. 이번 편은 매우 짧지만, 실제로 눈으로 확인했다는 점에 있어서 큰 의의를 두고 싶습니다. (길다고 모두 좋은 글은 아니니까요..ㅠ)