×
뎁스노트
로그인
홈
언어
프레임워크
개발도구
네크워크와 서버
데이터베이스
프로젝트 관리
데이터 사이언스
이야기
모집 · 홍보
로그인
회원가입
글쓰기
글 올리기
개발 노트, 이야기를 작성해보세요.
질문하기
부담없이 무엇이든 질문하세요.
홈
모든 글
모든 질문
팔로잉
카테고리
언어
Swift
Javascript
Python
Kotlin
Java
TypeScript
C/C++
R
C#
PHP
HTML · CSS
Objective-C
Go
MFC
Visual Basic · VBA
Ruby
JSP
기타 언어
프레임워크
React
Spring
Node.js
React Native
jQuery
Vue
Remix
Django
Laravel
PyTorch
Next.js
Nuxt.js
Angular
Svelte
Flask
FastAPI
TensorFlow
Selenium
Electron
Codeigniter
Ruby on Rails
기타 프레임워크
개발도구
Visual Studio Code
Cursor
Sublime Text
Android Studio
Xcode
Visual Studio
Eclipse
vi · vim
Atom
네크워크와 서버
서버 관리
네트워크
리눅스
AWS
API
Docker
클라우드
CDN
보안
데이터베이스
SQL
MySQL / MariaDB
mongoDB
PostgreSQL
MS SQL
Supabase
Oracle
SQLite
기타 DB
프로젝트 관리
개발 환경
CI/CD
Git
GitHub
SVN
데이터 사이언스
인공지능 AI
머신러닝
알고리즘
모집 · 홍보
교육과정 모집
구인 · 구직
세미나 · 이벤트 · 공모전
회사 · 제품 소개
광고 · 홍보
이야기
이벤트
Kotlin
코틀린 코루틴 실제 구현 코드에서 상태를 가지고 있어야 하는 경우에 질문이 있습니다.
햄깅
4일 전
팔로우
팔로잉
안녕하세요 '코틀린 코루틴' 책을 읽으면서 공부 중인데 *코루틴 내부 실제 구현 코드*를 보다가 궁금한 점이 생겨 질문드립니다. ```Kotlin suspend fun myFunction() { println("Before") var counter = 0 delay(1000) // 중단 함수 counter++ println("Counter: $counter") println("After") } ``` - 위와 같이 상태(`counter`) 를 보존해야하는 함수인 경우에 실제 구현이 아래처럼 된다고 나와있습니다. ```Kotlin fun myFunction(continuation: Continuation
): 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` 으로 선언하고 시작해도 원하는대로 실행이 되지 않을까.. 라고 생각됩니다.
couroutine
코루틴
코틀린
0
0
2
26
신고하기
사용자 차단하기
햄깅
4일 전
팔로우
팔로잉
댓글
2
올리기
답변 작성
답변 모드로 쓰기
이미지 첨부
올리기
무린
코루틴은
비동기 작업의 효율적 처리 등을 위해
일반 함수와는 다르게
실행 상태를 일시 중단했다가 재개
할 수 있습니다. 이를 위해 이 함수의 상태(변수 값, 실행 위치 등)를 저장하고 관리해야 하며, 이를 위해
Continuation
객체가 사용됩니다.
질문에 나온 코드에서
var counter = continuation.counter
로 초기화하는 이유는,
코루틴이 중단되었다가 재개될 때 이전 상태를 복구하기 위해서입니다.
반대로 var counter = 0으로 매번 초기화하면 코루틴이 재개될 때 이전 상태가 손실되어 원하는 동작을 하지 못하게 됩니다.
또 궁금하신 사항 있으시면 언제든지 질문 주세요~^^
3일 전
∙
1
∙
답글 달기
∙
공유
∙
신고
∙
차단
햄깅
@무린
이해가 되었습니다 친절한 답변 감사합니다!
3일 전
∙
1
∙
답글 달기
∙
공유
∙
신고
∙
차단
1
0
0
2
신고하기
사용자 차단하기