본문 바로가기

Android/RxJava14

[Android] RxJava 병렬 처리 (flatmap, merge, zip) RxJava 의 큰 장점 중 하나는 무엇이든 Observable 소스로 추상화하고, 이를 제공되는 Operation을 이용하여 손쉽게 가공할 수 있다는 점이다. 안드로이드 개발 중 가장 흔하게 접할 수 있는 케이스로는 Retrofit - RxJava 조합을 이용한 API 통신이 있다.기본적인 API 콜 코드MyService.fetchUserData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(user -> updateViewFrom(user));그런데 개발을 진행하다보면, 한번에 다수의 API 를 호출해야 할 상황을 맞이할 때가 있다. 역시 RxJava 에서 제공하는 다음 Oper.. 2023. 9. 26.
RxJava + Retrofit으로 Http 통신하기 이해를 돕기 위해 2가지의 예제를 통해 RxJava의 실습 코드를 포스팅 해보려고 합니다. 해당 내용은 다른 블로그의 내용을 참조하여 작성했습니다.두개의 예제 모두 RxJava+ Retrofit을 사용한다는 점에서 내용은 유사합니다. 첫번째 예제Java + RxJava2 + Retrofit2 + LiveData를 이용하여 HTTP 웹 통신을 하는데, Json 결과로 주고 받는 내용입니다.LiveData를 가져다 사용함으로써 Acitivty에서 깔끔한 코드를 구성할 수 있는 것 같습니다.완성된 예제는 https://github.com/keepseung/Country-MVVM/tree/02-Add-Retrofit-Rxjava 에서 볼 수 있습니다. App 모듈의 build.gradle은 아래와 같은 라이브러.. 2023. 6. 20.
RxJava (12) - Backpressure와 Flowable Backpressure와 FlowableRxJava에는 Backpressure라는 개념과 이를 처리하는 Flowable class가 존재한다.Backpressure가 무엇이고 Flowable은 어떻게 쓰는 것인지 알아보자. 배압(Backpressure)배압이란 데이터 생산과 소비가 불균형적일 때 일어나는 현상이다. 만약 10,000개의 데이터를 0.1초마다 발행하고, 소비는 10초마다 한다면 소비와 관계없이 데이터는 스트림에 계속 쌓이게 된다. Observable이 데이터를 발행하는 속도를 Observer의 소비 속도가 따라가지 못하는 것이다. 이는 결국 메모리가 overflow되고 OutOfMemoryError로 이어져 앱이 터질 것이다. 이러한 현상을 배압(Backpressure)이라고 하며 RxJa.. 2023. 6. 18.
RxJava (11) - 스케줄러 스케줄러RxJava의 스케줄러는 RxJava의 코드가 어느 스레드에서 실행될 것인지 지정하는 역할을 한다. RxJava만 사용한다고 비동기 처리가 되는 것이 아니라, 스케줄러를 통해 스레드를 분리해주어야 비동기 작업이 가능한 것이다. 스케줄러의 지정은 RxJava의 subscribeOn과 observeOn 연산자를 통해 가능하다. subscribeOn은 Observable이 데이터 흐름을 발생시키고 연산하는 스레드를 지정할 수 있고, observeOn은 Observable이 observer에게 알림을 보내는 스레드를 지정할 수 있다. RxJava의 큰 장점은 특정 스케줄러를 사용하다가 다른 스케줄러로 변경하기 쉽다는 점이다.(1) 세번째 subscribeOn 연산자에 의해 처음 데이터 발행은 파란색 스레.. 2023. 6. 18.
RxJava (10) - Observable 디버깅하기 Observable 디버깅 연산자데이터 스트림에서는 다양한 이벤트가 발생한다. 이러한 흐름이 어떻게 흘러가고 있는지 손쉽게 파악할 수 있도록 다양한 연산자들을 제공해준다. doOnEach() 메소드이 연산자는, 데이터가 발행되기 직전에 Notification라는 녀석을 통해 발행되는 데이터를 콜백 형태로 확인할 수 있도록 해준다. 아래와 같은 프로퍼티를 지원한다.fun main() { Observable.just(1, 2) .doOnEach { notification -> println("data? " + notification.value) println("isOnNext? " + notification.isOnNext) pri.. 2023. 6. 18.
RxJava (9) - Observable 오류 처리하기 Observable 오류 처리하기데이터가 발행되다 보면, 은연중에 오류가 발행할 수도 있는 것이다. 그런데 보통 데이터 스트림에서 오류가 발생하면, 즉시 데이터 스트림이 종료되기 때문에 따로 조치를 해주어야 하는 상황이 있을 수 있다. 이번 포스팅에선 Observable에서 발생할 수 있는 에러를 핸들링하는 방법 몇 가지를 알아보자. onError() Consumer 등록하기이전에 Observable에서 에러가 발생하면 Emitter.onError() 이벤트를 발행하는 것을 배운적 있다. subscribe()안에 onNext() Consumer 뿐만 아니라 onError() Consumer를 넣어줌으로써, onError()를 구독할 수 있다. 가장 일반적인 에러 핸들링 기법이다.fun main() { .. 2023. 6. 18.