코틀린에서 코루틴을 시작할 때 사용하는 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: 비동기 작업을 구조화하고, 부모 코루틴 내에서 새로운 코루틴 스코프를 생성합니다. 호출된 스레드를 블로킹하지 않으며, 자식 코루틴이 모두 완료될 때까지 현재 스코프를 종료하지 않습니다.