PHpullh
학습 라이브러리/Kotlin/구조화된 동시성 (Structured Concurrency)

KOTLIN · 비동기

구조화된 동시성 (Structured Concurrency)

코루틴의 생명주기를 구조적으로 관리합니다. 부모-자식 관계로 코루틴이 누수되는 것을 방지합니다.

비동기중급structured-concurrencycoroutineScopeasyncwithTimeout

핵심 설명

코루틴의 생명주기를 구조적으로 관리합니다. 부모-자식 관계로 코루틴이 누수되는 것을 방지합니다.

Kotlin code

import kotlinx.coroutines.*

suspend fun fetchUserData(userId: String): String {
    delay(300)
    return "사용자 데이터: $userId"
}

suspend fun fetchOrders(userId: String): List<String> {
    delay(200)
    return listOf("주문1", "주문2")
}

suspend fun loadDashboard(userId: String) = coroutineScope {
    // 병렬 실행 - 하나가 실패하면 모두 취소
    val userData = async { fetchUserData(userId) }
    val orders = async { fetchOrders(userId) }

    println(userData.await())
    println("주문: ${orders.await()}")
}

fun main() = runBlocking {
    // 타임아웃 포함
    try {
        withTimeout(1000) {
            loadDashboard("user-001")
        }
    } catch (e: TimeoutCancellationException) {
        println("타임아웃!")
    }

    // withContext로 디스패처 전환
    val result = withContext(Dispatchers.Default) {
        (1..1_000_000).sum()
    }
    println("합계: $result")
}

학습 팁

coroutineScope는 모든 자식이 완료될 때까지 대기하고, 하나가 실패하면 나머지를 취소합니다. 이것이 구조화된 동시성의 핵심입니다.

주의할 점

GlobalScope.launch는 구조화된 동시성을 깨뜨립니다. 항상 coroutineScope나 특정 스코프 내에서 코루틴을 시작하세요.

자주 묻는 질문

구조화된 동시성 (Structured Concurrency)란 무엇인가요?

코루틴의 생명주기를 구조적으로 관리합니다. 부모-자식 관계로 코루틴이 누수되는 것을 방지합니다.

구조화된 동시성 (Structured Concurrency) 학습 시 주의할 점은 무엇인가요?

GlobalScope.launch 는 구조화된 동시성을 깨뜨립니다. 항상 coroutineScope 나 특정 스코프 내에서 코루틴을 시작하세요.