Coroutine
Flow 03 - sharedFlow in Android (EventBus, TickHandler)
Flow 03 - sharedFlow in Android (EventBus, TickHandler) EventBus? EventBus Pattern이란 확장성이 뛰어난 반응형 앱을 구현하기 위한 분산 비동기 패턴을 말한다. 어느 한 곳에서 이벤트를 발생시키면, 해당 이벤트들을 구독하는 다른곳에서 전부 대응하여 처리할 수 있게 된다. 기존에는 greenrobot의 EventBus등 외부 라이브러리를 활용하는 경우가 많았으나, sharedFlow로 대체할 수 있게 되었다. EventBus 예제 class EventBus { private val _events = MutableSharedFlow() val events : SharedFlow = _events.asSharedFlow() suspend fun p..
Flow 02 - in Android (with Room)
Flow in Android (with Room) 이번에는 배운 Flow를 안드로이드에서 어떤 식으로 사용할 수 있는지 알아본다. 앞서 살펴본것 처럼 Flow는 비동기 데이터 스트림이기 때문에 Data Domain에서 사용하기에도 적합하고, 여러 방법을 통해 생명주기와 결합하여 마치 LiveData를 observing하던 것 처럼 사용할 수 있다. 안드로이드에서는 내부 DB로 주로 사용되는 Room과 결합하여, 데이터가 갱신될 때 마다 매번 호출하지 않아도, 자동으로 데이터의 변화를 감지하여 ui에 뿌려주는 방법으로도 사용할 수 있다. (Room은 Rx, Flow등의 비동기 데이터 스트림을 지원한다.) @Query("SELECT * FROM Todo") fun getTodos(): Flow fun get..
Flow 01 - Flow 기본
Flow(플로우) Flow란? Coroutine으로 만들어진, Kotlin에서 사용하는 비동기 데이터 스트림. 기존의 Java로 이루어진 RxJava보다 제공되는 기능은 다소 떨어지지만, 훨씬 경량화 되어 있어 가볍게 사용할 수 있으며, suspned 함수를 지원하여 Jetpack의 많은 라이브러리와 쉽게 호환될 수 있다. 리액티브 프로그래밍 & 데이터 스트림 리액티브 프로그래밍이란 데이터가 통지 될 때 마다 반응하여 데이터를 처리하는 방식을 말한다. 기존에 대응되는 명령형 프로그래밍에서는, 데이터를 요청 받으면 그 때 마다 응답하여 데이터를 리턴하지만, 리액티브 프로그래밍에서는 데이터의 발행자와 수신자를 나누어, 구독 요청이 들어오면 지속해서 데이터를 발행 (Emit) 하며, 이것을 데이터 스트림이라고..