코틀린에서 코루틴을 시작할 때 사용하는 runBlocking
과 coroutineScope
는 각각의 목적과 특성이 다르다.
runBlocking
은 호출된 스레드를 블로킹(blocking)한다. runBlocking
블록 내의 모든 작업이 완료될 때까지 현재 스레드는 멈추게 됨.runBlocking
은 새로운 코루틴 스코프를 생성. 이 스코프 내에서 코루틴을 실행할 수 있음.fun main() = runBlocking {
println("Start")
delay(1000L)
println("End")
}
위 예제에서 runBlocking
은 메인 스레드를 1초 동안 블로킹하며, 이후 "End"를 출력
coroutineScope
는 호출된 스레드를 블로킹하지 않음. 대신 서스펜딩(suspending) 함수로서 다른 코루틴을 블로킹하지 않고 실행을 일시 중지할 수 있음.coroutineScope
는 자신만의 새로운 코루틴 스코프를 생성하지만, 이를 호출한 코루틴을 블로킹하지 않음.coroutineScope
내에서 시작된 모든 자식 코루틴이 완료될 때까지 현재 스코프를 종료하지 않음.import kotlinx.coroutines.*
fun main() = runBlocking {
println("Start")
coroutineScope {
launch {
delay(1000L)
println("Inside Coroutine Scope")
}
}
println("End")
}
위 예제에서 coroutineScope
내의 launch
블록이 완료될 때까지 coroutineScope
는 종료되지 않고, 결과는 "Start", "End", "Inside Coroutine Scope" 순으로 출력
특징 | runBlocking |
coroutineScope |
---|---|---|
블로킹 여부 | 호출된 스레드를 블로킹함 | 호출된 스레드를 블로킹하지 않음 |
새로운 코루틴 스코프 생성 | Y | Y |
사용 사례 | main 함수, 단위 테스트 | 비동기 작업의 구조화, 내부 비동기 작업 |
부모 코루틴의 영향을 받음 | N | Y |
runBlocking
: 주로 메인 함수나 테스트에서 사용되며, 호출된 스레드를 블로킹합니다. 새로운 코루틴 스코프를 생성하고, 모든 작업이 완료될 때까지 현재 스레드를 멈춥니다.coroutineScope
: 비동기 작업을 구조화하고, 부모 코루틴 내에서 새로운 코루틴 스코프를 생성합니다. 호출된 스레드를 블로킹하지 않으며, 자식 코루틴이 모두 완료될 때까지 현재 스코프를 종료하지 않습니다.