인프런 커뮤니티 질문&답변

이경민님의 프로필 이미지

작성한 질문수

깡샘의 쌩초보 안드로이드 One Day Class – Part5 컴포넌트 이해하기

13-4 할 일 목록 앱 만들기

Dispatchers.Defult

해결된 질문

작성

·

45

0

먼저 유사한 질문이 있는지 검색해보세요.

학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!

인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

Dispatchers.Dafault 뒤에 + Job()을 붙이는 이유는 뭔가요?

답변 1

0

kkang님의 프로필 이미지
kkang
지식공유자

코루틴이 코틀린의 비동기 기술입니다.

안드로이드를 학습하면서 너무 깊이 다룰수가 없어서 액티비티의 ANR 문제를 해결하는 방법으로 소개차원에서 다룬 것이다보니 설명을 길게 하지 않았는데요..

코루틴을 만들려면 먼저 스코프가 있어야 합니다.

스코프내에 여러 코루틴이 만들어져서 각각의 업무가 진행됩니다.

스코프를 만들때 기본으로 주는 정보가 Dispatcher 와 Job 입니다.

스코프에 설정하는 Job 은 그 스코프에서 실행되는 모든 코루틴의 Job 의 상위 Job 이 됩니다.

즉 개별 코루틴의 Job 이 만들어지며 이 개별 코루틴의 Job 은 코루틴이 동작하는 스코프의 Job 의 서브 Job 이 됩니다.

 

어디선가 필요하다면 job 을 이용해 코루틴의 동작을 제어할 수 있는데

개별 코루틴의 Job 으로 제어하면 그 코루틴이 제어되는 것이고

스코프의 Job 으로 제어하면 그 스코프에서 실행된 모든 코루틴들이 제어되는 것입니다.

 

그럼으로 스코프를 만들때 Job 을 설정하게 되어 있습니다.

이경민님의 프로필 이미지
이경민
질문자

그럼 CoroutineScope 함수의 매개변수로 CoroutineContext형을 입력받는다고 하는데 Dispatchers.Default + Job()로 매개변수를 전달해도 오류가 발생하지 않는 이유는 무엇인가요?

kkang님의 프로필 이미지
kkang
지식공유자

CoroutineScope 함수의 매개변수 타입은 CoroutineContext 가 맞습니다.

Dispatchers.Default + Job() 이 단순한 산술 연산의 더하기가 아니며 내부적으로 매개변수에 설정된 두개의 element 로 판단해 두개를 머징(merging) 하게 됩니다.

만약 Dispatchers 만 선언되었다면 내부적으로 Job 을 만들어 적용하며 Job 이 지정되었다면 코드에서 지정한 Job 을 이용하게 됩니다. 그리고 최종 결과로 CoroutineContext 가 만들어저 대입되게 됩니다.

이경민님의 프로필 이미지
이경민
질문자

아 감사합니다. 그럼 merging하는 과정에서 코틀린 문법에 의해 타입이 CoroutineContext로 변했다고 이해하면 될까요?

kkang님의 프로필 이미지
kkang
지식공유자

넵. merging 작업을 거쳐서 CoroutineContext 가 만들어저 적용됩니다.

이경민님의 프로필 이미지
이경민
질문자

감사합니다! 이해가 되었습니다!