코틀린에서 코루틴(Coroutine) 사용하기
안녕하세요, 여러분! 오늘은 코틀린(Kotlin)에서 코루틴(Coroutines)을 어떻게 사용하는지 단계별로 알아보려고 합니다.
코루틴을 사용하면 비동기 프로그래밍이 정말 편해집니다. 자, 그럼 시작해볼까요?
1. 코루틴이란 무엇인가요?
먼저 코루틴이 뭔지 간단히 짚고 넘어가야겠죠?
코루틴은 쉽게 말해서 비동기 작업을 더 간편하고 효율적으로 처리할 수 있게 해주는 코틀린의 기능이에요.
전통적인 스레드 방식보다 가볍고, 복잡한 비동기 코드도 더 읽기 쉽게 만들어줍니다.
2. 코틀린 프로젝트에 코루틴 설정하기
코루틴을 사용하려면 프로젝트에 코루틴 라이브러리를 추가해야 해요.
먼저 build.gradle
파일에 다음과 같이 추가해 주세요
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
}
그럼 이제 코루틴을 사용할 준비가 됐어요!
3. 코루틴의 기본 사용법
코루틴을 사용하는 기본적인 방법부터 알아볼게요.
가장 간단한 형태의 코루틴은 runBlocking
과 launch
를 사용하는 거예요.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
위 코드는 1초 후에 "World!"를 출력해요.
runBlocking
은 코루틴을 시작하고, launch
는 새로운 코루틴을 실행시켜요.
delay
는 코루틴을 잠시 멈추게 합니다.
4. 비동기 작업 처리하기
코루틴의 진가는 비동기 작업을 처리할 때 드러납니다.
예를 들어, 네트워크 요청을 비동기적으로 처리하는 코드를 작성해볼게요.
import kotlinx.coroutines.*
suspend fun fetchData(): String {
delay(2000L) // 네트워크 요청 시뮬레이션
return "Data fetched"
}
fun main() = runBlocking {
val result = async { fetchData() }
println("Fetching data...")
println(result.await())
}
여기서 fetchData
함수는 suspend
키워드로 정의되어 있어요.
suspend
함수는 다른 코루틴 내에서 호출할 수 있어요.
async
를 사용해서 비동기 작업을 시작하고, await
를 사용해서 결과를 기다립니다.
5. 구조화된 동시성
코루틴의 또 다른 강력한 기능은 구조화된 동시성이에요.
이는 코루틴의 생명주기를 더 잘 관리할 수 있게 도와줍니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("Task from runBlocking")
}
coroutineScope {
launch {
delay(1500L)
println("Task from nested launch")
}
delay(500L)
println("Task from coroutine scope")
}
println("Coroutine scope is over")
}
위 코드에서는 coroutineScope
를 사용하여 중첩된 코루틴 블록을 만들었어요.
coroutineScope
블록 내의 모든 코루틴이 완료될 때까지 실행이 일시 정지됩니다.
6. 예외 처리
마지막으로, 코루틴에서 예외를 처리하는 방법도 알아봅시다.
코루틴 내에서 발생하는 예외는 전파되어 부모 코루틴에 의해 처리됩니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
try {
repeat(1000) { i ->
println("Job: I'm sleeping $i ...")
delay(500L)
}
} catch (e: CancellationException) {
println("Job was cancelled")
} finally {
println("Job is finishing")
}
}
delay(1300L)
println("Main: I'm tired of waiting!")
job.cancelAndJoin()
println("Main: Now I can quit.")
}
cancelAndJoin
을 사용하여 코루틴을 취소하고 종료할 때까지 기다립니다.
try-catch
블록으로 예외를 잡고, finally
블록으로 정리 작업을 수행할 수 있습니다.
이렇게 해서 코틀린에서 코루틴을 사용하는 기본적인 방법을 알아봤어요. 처음엔 조금 헷갈릴 수 있지만, 익숙해지면 정말 편리한 도구가 될 거예요. 여러분도 코루틴을 사용해 비동기 작업을 더 쉽게 처리해보세요!