[kotlin] 코루틴 취소와 예외 처리 방법

코루틴은 Kotlin에서 비동기 프로그래밍을 위한 강력한 도구로 사용되는데, 취소와 예외 처리는 코루틴에서 중요한 부분입니다. 이번 글에서는 코루틴에서의 취소와 예외 처리에 대해 알아보겠습니다.

1. 코루틴 취소

코루틴은 취소가 필요한 경우에 유용합니다. 예를 들어, 네트워크 요청을 보내는 도중에 사용자가 액티비티를 나가면 해당 네트워크 요청을 취소해야 하는 경우 등이 있습니다. 코루틴을 취소하는 방법으로는 Job 객체를 사용할 수 있습니다.

다음은 Job을 사용하여 코루틴을 취소하는 예제 코드입니다.

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        try {
            repeat(1000) { i ->
                println("Job: I'm sleeping $i ...")
                delay(500L)
            }
        } finally {
            println("Job: I'm running finally")
        }
    }
    delay(1300L) // delay a bit
    println("main: I'm tired of waiting!")
    job.cancelAndJoin() // cancels the job and waits for its completion
    println("main: Now I can quit.")
}

코드에서 job.cancelAndJoin()으로 코루틴을 취소할 수 있습니다.

2. 예외 처리

코루틴에서의 예외 처리는 기존의 예외 처리와 유사합니다. 코루틴 내에서 발생한 예외는 try..catch 블록을 사용하여 처리할 수 있습니다.

다음은 코루틴 내에서 예외를 처리하는 예제 코드입니다.

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = GlobalScope.launch {
        println("Throwing exception from launch")
        throw IndexOutOfBoundsException() // Will be printed to the console by CoroutineExceptionHandler
    }
    job.join()
}

위의 코드는 발생한 예외를 CoroutineExceptionHandler를 사용하여 처리하는 방법을 보여줍니다.

요약

코루틴에서의 취소와 예외 처리는 비동기 프로그래밍에서 매우 중요한 부분입니다. 코루틴은 Job 객체를 사용하여 취소하고, try..catch 블록을 사용하여 예외를 처리할 수 있습니다.

더 많은 정보는 Kotlin 공식 문서를 참고하세요.