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 나 특정 스코프 내에서 코루틴을 시작하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.