해결된 질문
작성
·
45
답변 1
0
코루틴이 코틀린의 비동기 기술입니다.
안드로이드를 학습하면서 너무 깊이 다룰수가 없어서 액티비티의 ANR 문제를 해결하는 방법으로 소개차원에서 다룬 것이다보니 설명을 길게 하지 않았는데요..
코루틴을 만들려면 먼저 스코프가 있어야 합니다.
스코프내에 여러 코루틴이 만들어져서 각각의 업무가 진행됩니다.
스코프를 만들때 기본으로 주는 정보가 Dispatcher 와 Job 입니다.
스코프에 설정하는 Job 은 그 스코프에서 실행되는 모든 코루틴의 Job 의 상위 Job 이 됩니다.
즉 개별 코루틴의 Job 이 만들어지며 이 개별 코루틴의 Job 은 코루틴이 동작하는 스코프의 Job 의 서브 Job 이 됩니다.
어디선가 필요하다면 job 을 이용해 코루틴의 동작을 제어할 수 있는데
개별 코루틴의 Job 으로 제어하면 그 코루틴이 제어되는 것이고
스코프의 Job 으로 제어하면 그 스코프에서 실행된 모든 코루틴들이 제어되는 것입니다.
그럼으로 스코프를 만들때 Job 을 설정하게 되어 있습니다.
CoroutineScope 함수의 매개변수 타입은 CoroutineContext 가 맞습니다.
Dispatchers.Default + Job() 이 단순한 산술 연산의 더하기가 아니며 내부적으로 매개변수에 설정된 두개의 element 로 판단해 두개를 머징(merging) 하게 됩니다.
만약 Dispatchers 만 선언되었다면 내부적으로 Job 을 만들어 적용하며 Job 이 지정되었다면 코드에서 지정한 Job 을 이용하게 됩니다. 그리고 최종 결과로 CoroutineContext 가 만들어저 대입되게 됩니다.
그럼 CoroutineScope 함수의 매개변수로 CoroutineContext형을 입력받는다고 하는데 Dispatchers.Default + Job()로 매개변수를 전달해도 오류가 발생하지 않는 이유는 무엇인가요?