PHpullh
학습 라이브러리/Kotlin/CoroutineScope & Dispatcher

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 를 사용하세요.