💡 구조화된 동시성에 이어서 Job과 child 코루틴의 특징에 대하여 학습하였습니다.Coroutine Job?Job은 코루틴을 취소하고, 상태를 파악하는 등 다양하게 사용될 수 있는 컨텍스트입니다.수명주기를 가지며 인터페이스 입니다.구체적인 사용법과 상태를 가지고 있다는 점에서 추상 클래스처럼 다룰 수 있습니다.Coroutine Job 상태 도식도아래와 같이 6가지 상태와 도식표로 나타낼 수 있습니다.실제 코드에서는 toString을 활용해 잡의 상태를 볼 수 있습니다.Active잡이 실행되고 코루틴이 잡을 수행합니다.잡이 코루틴 빌더에 의해 생성되었을 때, 본체가 실행되는 상태이며 자식 코루틴을 시작할 수 있습니다.New대부분 코루틴은 Active 상태로 시작되지만, 지연 시작되는 코루틴은 New ..
💡 코루틴 빌더에서 활용되는 코루틴 컨텍스트에 대하여 학습하였습니다.코루틴 컨텍스트코루틴 빌더의 정의를 보면 첫 번째 파라미터가 CoroutineContext임을 알 수 있습니다.fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Job리시버뿐만 아니라 마지막 인자의 리시버도 CoroutineScope 타입이며, 중요한 개념으로 활용되는 CoroutineContext의 정의를 알아야 합니다 !CoroutineContext 인터페이스Corou..
💡 코루틴 라이브러리를 활용하는 kotlin.coroutines에서 사용하는 다양한 코루틴 빌더에 대하여 학습하였습니다.코루틴 빌더중단 함수는 컨티뉴에이션 객체를 다른 함수로 전달해야 합니다.즉 중단 함수 → 일반 함수 호출은 가능하지만, 일반 함수 → 중단 함수 호출은 불가능합니다.모든 중단 함수는 또 다른 중단 함수에 의해 호출되어야 하며, 이는 앞서 호출한 중단 함수 또한 마찬가지입니다.중단 함수를 연속으로 호출하면 시작되는 지점이 반드시 있습니다.코루틴 빌더(coroutine builder)가 그 역할을 하며, 일반 함수와 중단 가능한 세계를 연결시키는 다리 역할을 합니다.launchrunBlockingasynclaunch 빌더launch는 thread 함수를 호출하여 새로운 스레드를 시작하는 ..
💡 코틀린 자체 언어의 코루틴(지원)과 코틀린 코루틴 라이브러리(라이브러리)의 차이에 대하여 학습하였습니다. 코루틴 : 언어 차원에서 지원 vs 라이브러리코루틴은 두 가지 개념으로 생각할 수 있습니다.코틀린 언어에서 자체적으로 지원하는 부분코틀린 코루틴 라이브러리둘은 같은 개념으로 보이지만 큰 차이가 있습니다.코틀린 언어에서 지원코틀린 언어에서 자체적으로 지원하는 부분은 아래와 같은 특징이 있습니다.컴파일러의 지원, 코틀린 기본 라이브러리의 요소자유도를 보장하기 위해 코루틴을 최소한으로 지원기본 라이브러리에 포함되어 있으며, kotlin.coroutines 패키지에 포함되어 있음직접 사용하기는 어려움모든 동시성 스타일 허용코틀린 코루틴 라이브러리kotlinx.coroutines 라이브러리를 추가하는 방..
💡 실제 코루틴 내부가 어떻게 작동하는지 이해하기 위한 학습입니다. 코루틴의 실제 구현?중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신(state machine)과 비슷합니다.*state machine : 하나의 상태만을 가지는 추상 기계컨티뉴에이션(continuation) 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있습니다.함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장식(Decorate)이라고 합니다.컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다.컨티뉴에이션 전달 방식 (CPS)continuation-passing style프로그램의 흐름을 제어하기 위해 contin..