KOTLIN · 비동기
CoroutineScope & Dispatcher
Structured Concurrency의 핵심인 스코프와 실행 컨텍스트(Dispatcher) 이해.
비동기중급DispatcherwithContextcoroutineScopesupervisorScopeIO
핵심 설명
Structured Concurrency의 핵심인 스코프와 실행 컨텍스트(Dispatcher) 이해.
Kotlin code
import kotlinx.coroutines.*
fun main() = runBlocking {
// Dispatchers.Default — CPU 집약적 작업
val cpuResult = withContext(Dispatchers.Default) {
(1..10_000_000).sum()
}
println("CPU 결과: $cpuResult")
// Dispatchers.IO — 파일/네트워크 I/O
val ioResult = withContext(Dispatchers.IO) {
readFileMock()
}
println("IO 결과: $ioResult")
// Dispatchers.Main — UI 업데이트 (Android)
// withContext(Dispatchers.Main) { updateUI() }
// coroutineScope — 자식이 모두 완료될 때까지 대기
coroutineScope {
repeat(3) { i ->
launch { println("작업 $i 완료") }
}
}
println("coroutineScope 완료")
// supervisorScope — 자식 하나 실패해도 나머지 계속
supervisorScope {
launch { throw Exception("실패!") }
launch { delay(100); println("나는 계속 실행") }
}
}
suspend fun readFileMock(): String {
delay(100); return "file content"
}학습 팁
withContext()는 새 코루틴을 만들지 않고 현재 코루틴의 컨텍스트만 바꿉니다. IO → Default 전환 시 오버헤드가 적습니다.
주의할 점
Android에서 GlobalScope 사용은 메모리 누수의 주원인입니다. viewModelScope, lifecycleScope를 사용하세요.
자주 묻는 질문
CoroutineScope & Dispatcher란 무엇인가요?
Structured Concurrency의 핵심인 스코프와 실행 컨텍스트(Dispatcher) 이해.
CoroutineScope & Dispatcher 학습 시 주의할 점은 무엇인가요?
Android에서 GlobalScope 사용은 메모리 누수의 주원인입니다. viewModelScope , lifecycleScope 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.