2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

runBlocking

작성: sangseek | 게시 날짜: 2026/01/12 | 조회수: 44
[ 편집불가 ]

runBlocking은 Kotlin 코루틴에서 "새 코루틴을 시작하고 그 코루틴이 끝날 때까지 현재 스레드를 블록(대기)하는" 함수입니다. 주로 프로그램의 진입점(예: main 함수)이나 테스트에서 비동기 코드를 동기적으로 실행할 필요가 있을 때 사용합니다. 요점 정리 - 역할: suspend 블록을 실행하는 코루틴을 만들고, 해당 블록이 모두 끝날 때까지 현재 호출 스레드를 차단(block)합니다. 즉, 함수는 코루틴이 완료될 때까지 반환되지 않습니다. - 시그니처(요약): fun runBlocking(context: CoroutineContext = ..., block: suspend CoroutineScope.() -> T): T - block 내부는 suspend 함수들을 호출할 수 있고, CoroutineScope 안에서 동작합니다. - runBlocking은 블록의 결과를 반환하고, 블록에서 발생한 예외는 호출자에게 재던져집니다. - 구조적 동시성: runBlocking이 만든 CoroutineScope 내에서 시작된 모든 자식 코루틴은 블록이 끝나기 전에 완료되어야 합니다(자동으로 join됨). - 사용처: 주로 main 함수에서 샘플/데모, 단위 테스트(@Test)에서 비동기 로직을 동기적으로 검증할 때 적합합니다. - 주의사항: - UI 스레드나 이벤트 루프를 차단하면 안 되므로(예: Android의 메인 스레드) 실제 앱의 메인 루프에서는 사용을 피해야 합니다. - 이미 코루틴 컨텍스트 내부에서 사용하면(특히 같은 단일 스레드 컨텍스트) 데드락을 유발할 수 있습니다. 내부에서 스레드를 차단하므로 주의해야 합니다. - 예시: - 간단한 사용: val result = runBlocking { launch { delay(1000); println("World") } println("Hello") } // "Hello" 출력 후 1초 뒤 "World" 출력, runBlocking은 모든 작업이 끝날 때까지 반환하지 않음 - 단위 테스트: @Test fun testSomething() = runBlocking { // suspend 함수 호출 및 검증 } 대안 - 테스트용으로는 kotlinx-coroutines-test의 runBlockingTest(또는 최신 API의 runTest)를 사용하는 것이 가상 시간 제어 등에서 더 적절합니다. - 프로덕션 코드에서는 withContext, coroutineScope, launch + join 등 비차단 방식으로 코루틴을 구성하는 것이 권장됩니다. 요약하면 runBlocking은 비동기 suspend 코드를 동기적으로 실행하기 위해 현재 스레드를 블록하는 도구로, 진입점이나 테스트 등에서 편리하지만 일반 애플리케이션의 런타임이나 UI 스레드에서는 사용을 피해야 합니다.
내용이 부정하다면 싫어요를 누르세요.