Coroutines (5) 썸네일형 리스트형 [Coroutines] Channel, Pipeline ✅ Coroutine Channel 기본적으로 Deffered는 Coroutine간의 단일 값을 전달하는 방법을 제공하고, Channel은 Stream의 값을 전달하는 방법을 제공한다. Channel은 BlockingQueue와 비슷하다. 한가지 차이점은 BlockingQueue의 put 함수 대신 일시중단 가능한 send()함수가 존재하고, take 함수 대신 receive() 함수가 존재한다. channel은 더이상 사용하지 않을 때 close()를 이용하여 원소가 없음을 나타낼 수 있다. 이 덕분에 receiver side에서는 for loop를 사용하여 채널로부터 element를 편하게 수신할 수 있다. close()가 호출되는 순간 반복이 중단되지만, close 되기 전까지 보낸 모든 요소는 수.. [Coroutines] StateFlow ✅ Coroutine StateFlow 안드로이드 프로젝트 구조를 MVVM으로 설계를 하면서 LiveData를 정말 편하게 잘 활용해왔다. 거의 필수적으로 사용했던 이유를 추려보자면 다음과 같을 것이다. 1. LiveData는 Activity, Fragment등의 Android Component의 Lifecycle을 자동으로 인식한다. 2. Observer Pattern으로 구현되어 관찰하고 있는 데이터가 변경되면 Observer 객체에 알려주고 이를 이용해서 UI를 업데이트 할 수 있다. 3. AAC DataBinding과 호환되어 사용하기 매우 편리하다. 이러한 LiveData의 한계점도 있을까? Andorid 환경에서 통용되는 Clean Architecture를 생각해보자. Presentation .. [Coroutines] Flow - Coroutine Flow Coroutine에서 Flow는 단일 값만을 반환하는 suspend function과는 달리 여러 값들을 순차적으로 방출할 수 있는 Data Stream이다. Flow는 순차적인 값을 생성하는 Iterator와 비슷하지만 suspend function을 이용하여 값을 비동기적으로 생성하고 사용한다. Data Stream은 크게 생산자(Producer), 중개자(Intermediary), 소비자(Consumer)로 구성된다. 생산자(Producer): Stream에 추가되는 데이터를 생산한다. Flow는 비동기적으로 데이터를 생산할 수 있다. 중간 연산자(Intermediary): Stream에서 방출하는 개별 값이나 Stream 그 자체를 수정할 수 있다. 소비자(Consu.. [Coroutines] Job (status, cancel error handling) ✅ Job 코루틴의 Job은 기본적으로 백그라운드 작업이다. 이는 취소가 가능하고(Cancellable) 완료로 끝나는 수명주기를 가지고 있다. 또한 Parent Job을 취소하면 모든 Child Job이 재귀적으로 취소되는 Parent - Child계층구조로 정렬된다. ✅ Job의 6가지 상태 (New / Active / Completing / Cancelling/ Cancelled / Completed) 일반적으로 Job은 Active 상태에서 시작한다. 하지만 코루틴 빌더의 start매개변수를 CoroutineStart.LAZY로 지정한 경우 New상태에서 시작한다. Job은 코루틴이 작동하는 동안 혹은 CompletableJob이 완료, 실패, 취소 될 때까지 Active 상태로 존재한다. Act.. [Coroutines] Coroutine Basic1 (CoroutineScope, CoroutineContext, Dispatcher, Async, launch) 지금까지 프로젝트를 하면서 네트워크 및 계산처리 등의 비동기 작업을 RxJava / RxKotlin으로 구현해왔었다. Rx는 데이터의 흐름을 보면서 작업을 할 수 있다는 장점이 있다. 하지만 이 라이브러리를 효율적으로 100%활용하려면 Rx의 마법같은 메서드와 로직들을 많이 알아야했는데, 러닝커브가 상당히 높았다. 많은 회사들이 비동기 처리를 더욱 간편하게, 더 가볍게 사용할 수 있는 코루틴으로 대체하고 있다. Coroutine은 특정 위치에서 일시정지하고 다시 시작할 수 있는 많은 진입점들을 허용한다. 이러한 장점으로 Thread를 차단하지 않고 다른 코루틴을 실행하면서 많은 동시작업을 진행시킬 수 있다. 코루틴의 경량성과 비동기 작업의 쉬운 통제가 강력한 장점인 것 같다. 필자 또한 리팩토링을 진행하.. 이전 1 다음