본문 바로가기
공부/코틀린코루틴:딥다이브(마르친 모스카와)

7장 - 코루틴 컨텍스트

by 띵커베르 2024. 1. 29.
728x90
  • 코루틴 컨텍스트
    • 코루틴의 동작과 관련된 여러 설정을 담고 있는 정보의 집합.
    • 코루틴의 실행 스레드, 코루틴의 이름, 사용할 디스패처와 같은 정보를 포함할 수 있다.
    • 코틀린에서는 코루틴컨텍스트 인터페이스를 통해 관리한다.
  • 확장함수: 기존 클래스에 새로운 메서드를 추가할 수 있는 코틀린 기능
  • 코루틴의 launch 함수는 CoroutineScope 인터페이스의 확장 함수로 정의되어 있습니다.
    • 이는 CoroutineScope 인스턴스에 대해 launch 함수를 호출할 수 있다는 의미.
  • 리시버: 확장 함수가 호출되는 대상 객체를 리시버 라고 한다.
  • this 참조: 확장함수 내부에서는 리시버 객체를 this 키워드를 사용하여 참조할 수 있다.
  • key를 통한 Element 식별
    • 코루틴 컨텍스트 내의 각 Element 는 고유한 Key 를 가지고 있습니다. Key 는 CoroutineContext.Key 인터페이스를 상속받아 구현됩니다. Key 의 주된 역할은 타입-안전한 방식으로 컨텍스트 내의 원소를 식별하고 접근하는 것입니다.
    • 타입-안전한 접근
      • key 를 통해 컨텍스트 내의 원소에 접근할 때, 타입 안정성이 보장됩니다.
      • 즉 Key를 사용하여 컨텍스트에서 원소를 추축할 때, 해당 원소는 Key에 지정된 타입으로 변환됩니다.
      • 이는 컴파일 타임에 타입 체크가 가능하게 하여, 런타임에 잘못된 타입으로 인한 오류를 방지합니다.
  • 컨텍스트 더하기
    • + 연산자로 합칠 수 있다.이 기능은 연산자 오버로딩을 통해 구현되어 있다.
  • 컨텍스트 폴딩
    • 컨텍스트의 모든 요소에 대해 순차적으로 연산을 적용하는 과정을 의미한다.
    • 이는 컬렉션에서의 fold 연산과 유사한 개념입니다.
    • fold 메서드는 컨텍스트 내의 각 Element 에 대해 지정된 함수를 실행하며, 이 함수는 누적된 결과와 현재 Element 를 인자로 받아 새로운 누적 결과를 반환합니다.
  • 코루틴 컨텍스트와 빌더
    • 코루틴컨텍스트는 코루틴의 데이터를 저장하고 전달하는 방법입니다.
      부모-자식 관계의 영향 중 하나로 부모는 기본적으로 컨텍스트를 자식에게 전달합니다.
      자식은 부모로부터 컨텍스트를 상속받는다고 할 수 있습니다.
      모든 자식은 빌더의 인자에서 정의된 특정 컨텍스트를 가질 수 있습니다.
      인자로 전달된 컨텍스트는 부모로부터 상속받은 컨텍스트를 대체합니다.
      • 코루틴 컨텍스트의 역할: 코루틴 컨텍스트는 코루틴의 동작 방식, 스케줄링, 생명주기 관리 등을 결정합니다. 각 코루틴은 자신만의 컨텍스트를 가지며, 이를 통해 자신의 동작 환경을 설정합니다.
      • 부모-자식 관계: 코루틴은 부모-자식 관계를 형성할 수 있으며, 이 관계는 작업의 계층 구조와 생명주기 관리에 영향을 줍니다. 일반적으로, 부모 코루틴이 취소되면 자식 코루틴도 취소됩니다.
      • 컨텍스트의 상속: 코루틴을 생성할 때, 부모 코루틴의 컨텍스트는 기본적으로 자식 코루틴에게 전달됩니다. 이는 자식 코루틴이 부모 코루ㅋ틴과 동일한 동작 환경(예: 동일한 Dispatcher, Job 등)에서 실행되게 하기 위함입니다.
      • 컨텍스트의 재정의: 자식 코루틴은 생성 시 받은 컨텍스트를 기반으로 자신의 컨텍스트를 재정의할 수 있습니다. 즉, 코루틴 빌더(예: launch, async)에 전달된 컨텍스트 인자는 부모로부터 상속받은 컨텍스트를 대체하거나 수정합니다. 이를 통해 자식 코루틴은 부모와 다른 설정(예: 다른 Dispatcher, 추가된 CoroutineName 등)을 가질 수 있습니다.
728x90

댓글