코틀린의 코루틴은 비동기 프로그래밍을 편리하게 다룰 수 있도록 하는 기능 중 하나입니다. 코루틴은 코틀린 표준 라이브러리에 내장되어 있으며, kotlinx.coroutines 라이브러리를 통해 제공됩니다. 이를 통해 일시 중단 함수(suspending functions)를 사용하여 비동기적인 작업을 효과적으로 다룰 수 있습니다.
1. 일시 중단 함수
코루틴을 사용하면 일시 중단 함수를 작성하여 비동기 코드를 더 쉽게 작성할 수 있습니다. 일시 중단 함수는 suspend 키워드를 사용하여 선언됩니다.
import kotlinx.coroutines.delay
suspend fun mySuspendingFunction() {
println("Start")
delay(1000) // 1초 동안 일시 중단
println("End")
}
2. 코루틴 빌더
launch, async, runBlocking 등의 코루틴 빌더를 사용하여 일시 중단 함수를 호출할 수 있습니다.
import kotlinx.coroutines.*
suspend fun mySuspendingFunction() {
println("Start")
delay(1000)
println("End")
}
fun main() = runBlocking {
launch {
mySuspendingFunction() // launch 빌더를 통해 비동기적으로 호출
}
println("Main thread is not blocked.")
delay(2000)
println("End")
}
3. 취소와 예외 처리
코루틴은 CancellationException을 통해 취소되거나, 예외를 통해 오류 처리됩니다. try-catch 블록을 사용하여 예외를 처리할 수 있습니다.
import kotlinx.coroutines.*
suspend fun mySuspendingFunction() {
println("Start")
try {
delay(1000)
throw RuntimeException("An error occurred") // 예외 발생
} catch (e: Exception) {
println("Caught exception: ${e.message}")
}
println("End")
}
fun main() = runBlocking {
launch {
mySuspendingFunction()
}
println("Main thread is not blocked.")
delay(2000)
println("End")
}
4. 코루틴 컨텍스트와 디스패처
코루틴은 실행 환경인 코루틴 컨텍스트를 통해 동작합니다. 컨텍스트를 통해 어느 스레드에서 코루틴이 실행될지, 코루틴이 어떤 작업을 수행할지를 제어할 수 있습니다.
import kotlinx.coroutines.*
suspend fun mySuspendingFunction() {
println("Running on ${Thread.currentThread().name}")
}
fun main() = runBlocking {
launch(Dispatchers.Default) {
mySuspendingFunction() // 백그라운드 스레드에서 실행
}
launch(newSingleThreadContext("MyOwnThread")) {
mySuspendingFunction() // 새로운 스레드에서 실행
}
mySuspendingFunction() // 메인 스레드에서 실행
}
코루틴을 사용하면 일시 중단 함수를 통해 비동기적인 작업을 더욱 간편하게 다룰 수 있습니다. kotlinx.coroutines 라이브러리를 통해 다양한 기능을 활용할 수 있으며, 특히 코루틴의 가독성과 간결성은 비동기 프로그래밍을 보다 효과적으로 만들어 줍니다.
With ChatGPT