시배's Android

Kotlin Coroutines Deep Dive | 7장. 코루틴 컨텍스트 본문

Book/Kotlin Coroutines Deep Dive

Kotlin Coroutines Deep Dive | 7장. 코루틴 컨텍스트

si8ae 2024. 1. 21. 00:52
  • CoroutineContext는 원소나 원소들의 집합을 나타내는 인터페이스입니다.
  • Job, CoroutineName, CoroutineDispatcher와 같은 Element 객체들이 인덱싱된 집합이라는 점에서 맵이나 셋과 같은 컬렉션이랑 개념이 비슷합니다.
  • CoroutineContext의 모든 원소가 CoroutineContext로 되어 있습니다.
  • CoroutineName이나 Job은 CoroutineContext 인터페이스를 구현한 CoroutineContext.Element를 구현합니다.
  • CoroutineContext는 컬렉션과 비슷하기 때문에 get을 이용해 유일한 키를 가진 원소를 찾을 수 있습니다.
  • 다른 키를 가진 두 원소를 더하면 만들어진 컨텍스트는 두 가지 키를 모두 가집니다.
  • CoroutineContext에 같은 키를 가진 또 다른 원소가 더해지면 맵처럼 새로운 원소가 기존 원소를 대체합니다.
  • CoroutineContext는 컬렉션이므로 빈 컨텍스트 또한 만들 수 있습니다.
  • minusKey 함수에 키를 넣는 방식으로 원소를 컨텍스트에서 제거할 수 있습니다.
  • CoroutineContext는 코루틴의 데이터를 저장하고 전달하는 방법입니다.
  • 모든 자식은 빌더의 인자에서 정의된 특정 컨텍스트를 가질 수 있습니다.
  • 인자로 전달된 컨텍스트는 부모로부터 상속받은 컨텍스트를 대체합니다.
  • defaultContext + parentContext + childContext
  • 컨텍스트는 중단 함수 사이에 전달되는 컨티뉴에이션 객체가 참조하고 있습니다.
  • 코루틴 컨텍스트를 커스텀하게 만드는 경우는 간단합니다. CoroutineContext.Element 인터페이스를 구현하는 클래스를 만드는 것입니다. 이러한 클래스는 CoroutineContext.Key<*> 타입의 Key 프로퍼티를 필요로 합니다.