runBlocking은 일반적으로 코루틴이 아닌 코드에서 코루틴을 시작할 때 (예: main 함수, 테스트 코드 등) 사용한다.
하지만 이미 코루틴 환경이 구성되어 있는 경우 (suspend 함수 내부, Spring 코루틴 지원, CoroutineScope 내 등)에는 필요하지 않다.
코루틴은 코루틴 안에서만 suspend 함수를 호출할 수 있다.
withContext는 suspend 함수이다. 반드시 코루틴 안에서만 호출 가능하다. 그리고 suspend 함수 자체가 코루틴 안에서 실행된다는 뜻이기 때문에, 굳이 runBlocking을 쓸 필요가 없다.
suspend fun doSomething() {
withContext(Dispatchers.IO) {
println("IO 작업 중")
}
}
이 doSomething() 함수는 suspend 함수다. 즉, 이 함수는 코루틴이 실행되고 있어야만 호출 가능하다.
렇다면 runBlocking은 언제 필요한가?
fun main() {
// 일반 함수에서는 suspend 함수를 직접 호출할 수 없음
doSomething() // 컴파일 오류
// 그래서 runBlocking이 필요함
runBlocking {
doSomething() // 가능
}
}
runBlocking은 "지금은 일반 함수지만, 이 안에서 코루틴을 시작하고 싶다"는 상황에서 코루틴 진입점 역할을 한다.
'【 개발 이야기 】' 카테고리의 다른 글
람다를 사용한 Sl4j 보일러 플레이트 개선 (2) | 2025.06.20 |
---|---|
[Spring Boot] WebFilter (1) | 2025.06.19 |
e.stackTrace와 e.stackTraceToString (1) | 2025.06.18 |
[kotlin] infix function (0) | 2025.06.17 |
[Spring&kotlin] try catch와 exception 예외와 오류 그리고... throw (2) | 2025.06.16 |