Language/Kotlin

[Coroutine] Coroutine Scope: 코루틴이 실행되는 범위

개랭갱깽스타 2022. 2. 5. 10:12

Coroutine Scope

코루틴의 동작하는 범위를 규정. 스코프 내에서 실행되는 코루틴의 실행을 감시하거나 취소할 수 있다.

 

GlobalScope

메인 스레드가 실행 중인 동안만 코루틴의 동작을 보장

  • 앱의 생명주기와 함께 동작한다.
  • 실행중에 별도의 생명주기 관리가 필요 없다.
    • 예제
fun now() = ZonedDateTime.now().toLocalTime().truncatedTo(ChronoUnit.MILLIS)

fun log(msg: String) = println("${now()} : ${Thread.currentThread()} : $msg")

fun launchInGlobalScope() {
    GlobalScope.launch {
        log("coroutine started")
    }
}
    • Thread 일시 정지
fun main() {
    log("main() started")
    launchInGlobalScope()
    log("launchInGlobalScope() executed")
    Thread.sleep(500L)
    log("main() terminated")
}
22:06:53.755 : Thread[main,5,main] : main() started
22:06:**53.828** : Thread[main,5,main] : launchInGlobalScope() executed
22:06:53.831 : Thread[**DefaultDispatcher-worker-1**,5,main] : coroutine started
22:06:**54.333** : Thread[main,5,main] : main() terminated #일시정지한만큼 쉬고 실행
    • Thread 일시 정지 X
fun main() {
    log("main() started")
    launchInGlobalScope()
    log("launchInGlobalScope() executed")
    //Thread.sleep(500L)
    log("main() terminated")
}
22:11:55.391 : Thread[main,5,main] : main() started
22:11:55.455 : Thread[main,5,main] : launchInGlobalScope() executed
22:11:55.455 : Thread[main,5,main] : main() terminated

 

CoroutineScope

  • 특정한 dispatcher 를 지정하여 동작이 실행될 스코프를 제한할 수 있다.
  • 필요할 때 열고 닫을 수 있다.

CoroutineScope

 

ViewModelScope

JetPack 아키텍쳐의 뷰모델 컴포넌트 사용시 뷰모델 인스턴스에서 사용하기 위해 제공되는 스코프

뷰모델 인스턴스가 소멸될 때 자동으로 취소된다.

반응형