runBlocking은 코루틴을 만들고 코드 블록이 수행이 끝날 때까지 runBlocking 다음의 코드를 수행하지 못하게 막는다.
이 때 코루틴을 만드는 함수를 coroutine builder라고 한다.
fun runBlockingFunc(){
runBlocking {
println(coroutineContext)// 코루틴 스코프는 코루틴을 제대로 처리하기 위한 정보, coroutineContext를 가지고 있다. coroutineContext는 여러가지 정보를 가지고 있음.
println(this) //runBlocking 안에서 this를 수행하면 코루틴이 수신 객체인 것을 알 수 있다. 즉 코드 블런 안에서 모든 코루틴 기능 사용 가능
println(Thread.currentThread().name)
delay(500L)
println("Hello")
}
println("World")
}
result
[BlockingCoroutine{Active}@5679c6c6, BlockingEventLoop@27ddd392]
BlockingCoroutine{Active}@5679c6c6
main
Hello
World
위의 코드는 runBlocking을 이용하여 만든 함수이다. 위에서 볼 수 있는 runBlocking의 특징을 알아보자.
1. runBlocking 안에서 this를 수행하면 코루틴이 수신 객체인 것을 알 수 있다. 즉, 코드 블록 안에서 모든 코루틴 기능을 사용 가능하다.
2. 코루틴 스코프는 코루틴을 제대로 처리하기 위한 정보, coroutineContext를 가지고 있다. coroutineContext는 여러가지 정보를 가지고 있다.
3. "World"를 출력하는 코드는 runBlocking이 실행되는 시간에 상관없이 runBlocking 블록이 끝날 때까지 기다리고 실행된다.
runBlocking을 사용할 때는 반환 값의 타입을 지정해야 한다. 하지만, 평소에는 컴파일러가 반환 타입을 유추하여 지정해주기 때문에 괜찮지만, 명시적으로 사용해야할 때는 명시적으로 타입을 지정해줘야한다.
fun main() {
println(runBlockingReturnFunc())
println(runBlockingReturnFunc2())
}
fun runBlockingReturnFunc() = runBlocking<Int>{
5 + 9
}
fun runBlockingReturnFunc2() = runBlocking<Unit>{
5 + 9
}
result
14
kotlin.Unit
'코틀린' 카테고리의 다른 글
예외 처리 (0) | 2023.01.26 |
---|---|
Iteration (0) | 2023.01.26 |
선택 표현과 처리 (0) | 2023.01.25 |
클래스와 프로퍼티 (0) | 2023.01.25 |
함수와 변수 (0) | 2023.01.25 |