Kotlin
[Kotlin] 18.1 코루틴 내부에서 던져진 오류 처리
mygomii
2025. 7. 4. 16:39
반응형
- 코루틴 안에서 예외가 발생하면 기본적으로 코루틴은 취소되고, 예외는 상위로 전파됨
- try/catch 구문을 사용하면 코루틴 내부에서 발생한 예외를 지역적으로 처리 가능함
- 하지만 launch와 async의 예외 처리 방식은 다르다는 점을 이해해야 함
빌더예외 처리 방식
launch | 예외가 발생하면 즉시 전파됨 (try/catch로 잡아야 함) |
async | 예외가 await()를 호출할 때까지 연기됨 (이때 try/catch 필요) |
val job = scope.launch {
try {
throw RuntimeException("예외 발생")
} catch (e: Exception) {
println("launch 블록에서 예외 처리됨: ${e.message}")
}
}
val deferred = scope.async {
throw RuntimeException("예외 발생") // 이 시점엔 예외 전파 X
}
try {
deferred.await() // 여기서 예외 발생
} catch (e: Exception) {
println("async 결과 await 중 예외 처리됨: ${e.message}")
}
- 예외는 구조화된 동시성에도 영향을 준다
- → 하나의 자식 코루틴이 예외로 종료되면, 그 스코프 내의 모든 형제 코루틴도 함께 취소됨
- 따라서 예외 발생 위치와 처리 범위를 명확히 구분해야 함
반응형