728x90
반응형
이번 글에서는 Coroutines가 어떻게 main-safety하게 동작하는 지에 대해 설명해보려한다.
먼저 안드로이드 ViewModelScope에서 실행되는 코루틴은 기본적으로 main thread에서 실행된다.
이는 매우 합리적인 이유가 있는데 우리는 ViewModel에서 UI 관련 작업을 자주 수행하기 때문이다.
우리가 ViewModel에서 아래와 같은 함수를 실행한다고 가정해보자.
fun performNetworkRequest() {
viewModelScope.launch {
val recentVersions = getVersions() // this is a suspend function
}
}
이렇게 네트워크 작업을 Retrofit으로 수행할 때, main thread blocking을 방지하기 위해
다른 스레드에서 실행하도록 변경할 필요가 없다.
보다 정확히 말하자면 suspend function은 해당 함수를 호출하는 스레드를 block하면 안된다는 컨벤션이 있는데,
Android Room, Retrofit등의 유명한 라이브러리들은 이 컨벤션을 적용하고 있다.
따라서 라이브러리가 자동으로 백그라운드 스레드로 작업을 스위칭해 실행하고 그 결과를 알려준다.
이렇게 메인 스레드에서 suspend function을 호출하지만
메인 스레드를 non-blocking되도록하는 동작을 두고 main-safety하다고 한다.
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
async CoroutineBuilder Introduction (0) | 2024.05.27 |
---|---|
Coroutines 기본적인 에러 처리하기(feat. try-catch) (0) | 2024.05.08 |
Coroutine Builder 이해하기 (0) | 2024.05.02 |
Coroutines의 내부 동작 (0) | 2024.03.07 |
Coroutines을 다른 스레드에서 실행하기 (0) | 2024.03.03 |