이번에는 CoroutineContext는 대체 무엇인지 알아보자.
그리고 간단히 CoroutineScope 구조까지 살펴보도록 하겠다.
viewModelScope로 찾아보기
viewModelScope는 CoroutineScope라는 인터페이스를 상속받아 만들어진 녀석이다.
그리고 CoroutineScope 인터페이스를 확인해보자.
보다시피 CoroutineContext를 가지고 있는 걸 볼 수 있다.
그리고 다시 한 번 CoroutineContext가 무엇인지 들어가보자.
문서 최상단을 읽어보면 CoroutineContext는 여러 Context Element를 포함하고 있다는 사실을 알 수 있다.
여기서 가장 중요한 Element에는 바로 Dispatcher, Job, ExceptionHandler, Name가 있다.
CoroutineScope 구조
코루틴은 반드시 특정 스코프에서 시작되어야 하는데, 특정 Context를 프로퍼티로 가지고 있다.
Context는 기본적으로 Element의 Map이다.
여기서 Dispatcher는 어느 스레드 혹은 스레드풀에서 코루틴을 실행할지 정의한다.
Job은 코루틴의 lifecycle을 관리하고, 부모-자식 계층을 구성하는데 사용된다.
ExceptionHandler와 Name이 있고, Name은 디버깅 목적으로 사용하기 좋다.
viewModelScope 구조 살펴보기
내가 지금까지 Coroutines 관련 글을 작성하며 가장 많이 사용했던 스코프이다.
먼저, Dispatcher는 Main.immediate를 가지고 있다.
그 이유는 대개 UI 작업을 이 스코프에서 실행하기 때문이다.
Job은 SupervisorJob이라는 녀석을 가지고 있고, ExceptionHandler는 따로 정의하지 않고 있다.
Element를 따로 정의하지 않은 경우 기본 값을 사용하게 되어있다.
'Language > Kotlin' 카테고리의 다른 글
withContext로 스레드 전환하기 (0) | 2024.09.18 |
---|---|
Coroutines Dispatcher 알아보기 (2) | 2024.09.13 |
Coroutines on Main Thread(위험성에 대해 인지하기) (0) | 2024.09.03 |
Extract retry logic into higher order function from previous Coroutine (0) | 2024.08.25 |
Implement Coroutines Retry (1) | 2024.06.05 |