Language/코루틴
[코루틴 #4 데이터 주고받기] Sequence, Flow, Channel
Iterator 인덱스로 요소를 검색할 수 없으므로 순서대로만 엑세스 할 수 있습니다. 더 많은 요소가 있는지 여부를 나타내는 hasNext()함수가 있습습니다. 요소는 한 방향으로만 검색할 수 있습니다. (이전 요소를 검색할 방법은 없음) (hot stream) 호출 사이에서 일시중단되지만 실행 중에는 일시중단 될 수 없습니다. 그래서 일시중단 연산이 없어도 반복할 수 있습니다. 앞으로 나올 Sequence와 Iteratort는 CoroutineContext를 받지 않습니다. 기본적으로 코드를 호출한 Context와 동일한 Context에서 코드가 실행되기 때문입니다. 정보 잔출 후에만 일시중지가 가능하기 때문에 이를 위해서 yield() 혹은 gieldAll() 함수를 호출해야 합니다. val ite..
Architecture components와 코루틴 Scope
CoroutineScope는 모든 Coroutine을 추적하고 Coroutine이 실행되어야 하는시기를 관리하는 데 도움이됩니다. 또한 그 안에서 시작된 모든 Coroutine을 취소 할 수 있습니다. 각 비동기 작업 또는 Coroutine은 특정 CoroutineScope 내에서 실행됩니다. Architecture components는 앱의 논리적 범위에 대한 Coroutine에 대한 최고 수준의 지원을 제공합니다. Architecture components는 앱에서 사용할 수 있는 다음과 같은 기본 제공 범위를 정의합니다. 1) ViewModelScope , 2) LifecycleScope, 3) LiveData 이 3가지 기본 Coroutine Scope는 각 해당 Architecture compo..
[코루틴 #2 동작 제어하기] - Dispatcher(문맥 지정), 작업 반복/ 취소/ 실행 보장/ 시간 만료
Context(문맥) 코루틴은 항상 Context(컨텍스트-문맥) 안에서 실행됩니다. Context(문맥)는 코루틴이 어떻게 실행되고 동작해야 하는지를 정의할 수 있게 해주는 요소들의 그룹입니다. Context는 또한 결합이 될 수 있고, 분리하여 제거할 수도 있습니다. 코루틴의 scope는 코루틴이 실행되는 Context를 정의합니다. scope는 코루틴의 jop과 dispatchers에 대한 정보를 결합합니다. scope는 코루틴을 추적하는데, 코루틴을 시작하면 "scope에 포함"됩니다. 이는 코루틴을 추적할 scope를 지정했음을 의미합니다. 코루틴이 실행될 때 어러 가지 Context는 CoroutineContext에 의해 정의됩니다. launch{ ... }와 같이 인자가 없는 경우에는 Cor..
[코루틴 # 1 생성과 소멸하기] - lunch( ), sync( ), Job
코루틴은 자바의 콜백 대신 비동기 작업을 좀 더 우아하고 효율적으로 처리하는 방법입니다. Kotlin 코루틴을 사용하면 콜백 기반 코드를, 좀 더 읽기 쉬운 순차적으로 작성된 코드로 변환할 수 있습니다. Suspend 함수를 사용하여 비동기작업을 순차적으로 코드를 작성할 수 있도록 합니다. 코루틴을 사용하면 프로세스/스레드의 작업을 중단(stopped)하고 다른 루틴을 사용하기위해 문맥교환을 하는 대신, 일시중단(suspended)해서 이런 비용을 줄일 수 있게 된다. 다시말해 일시중단은 사용자가 제어할 수 있기 때문에, 운영체제가 스케줄링에 개입하는 과정이 필요없게 됩니다. 뿐만 아니라 콜백과 달리 코루틴은 예외처리를 좀 더 안전하게 사용할 수 있습니다. 그리고 가장 큰 장점은 유지보수와 유연성을 갖고..