'RxJava' 태그의 글 목록 — SH's Devlog

RxJava

Android/RxJava

[RxJava] flatMap의 원리 및 Observable 스트림 종료 후 다시 이어가기

flatMap의 원리와 Observable 스트림 종료 후 다시 이어가기 RxJava는 데이터 스트림에 여러 연산자들을 체이닝하여 데이터를 조작할 수 있습니다. 원본 데이터에 체이닝하면서 데이터를 처리하기 위해서 거의 대부분의 경우에 flatMap, concatMap, switchMap을 사용하여 처리할 텐데, 이유는 이 연산자들은 방출되는 각각의 데이터 마다 Observable을 생성하여 데이터를 처리할 수 있게 해주므로 스레드 관리에 효과적이기 때문일 것입니다. 그런데 여기서 생산자에 따라 차이가 생기게 되며, 이 포스트에서는 flatMap을 예로 들어보겠습니다. Single, Maybe, Completable은 1 혹은 0개의 데이터를 발생하고 스트림을 종료합니다. 그래서 이 생산자들은 어짜피 하..

Android/RxJava

[RxJava] RxJava retryWhen으로 예외발생시 일정시간 간격으로 재시도 처리하기(retryWithDelay)

Rxjava를 사용할 때 예외처리 과정에서 retryWhen()을 사용하면 재시도를 구현할 수 있습니다. 이번 포스트에서는 retryWhen 메소드에 대해 정리해보겠습니다. retryWhen의 마블 다이어그램 retryWhen의 마블 다이어그램을 해석 먼저, Observable에서 에러가 발생됩니다. 그러면 retryWhen을 타게 되는데 retryWhen에서 데이터가 발행되면 -> upstream을 재실행합니다. retryWhen에서 에러가 발행되면 -> 최종적으로 error를 발행합니다. Flowable의 retryWhen 구현부 public abstract class Flowable implements Publisher { // ... @CheckReturnValue @NonNull @Backpre..

Android/RxJava

[RxJava] 조합 연산자(Combining Operators)

조합 연산자는 두개의 데이터를 조합해서 새로운 Observable을 만드는 연산자입니다. combineLatest combineLatest는 두개의 Observable에서 각각 데이터가 생성될 때 데이터를 조합해서 전달하는 연산자입니다. 첫 데이터는 두개의 Observable에서 모두 데이터가 생성됐을 때 전달이 되고, 그 이후에는 각각의 Observable에서 데이터가 생성 될 때 데이터를 조합해서 전달합니다. 예를 들면, Validation Check를 할 때에 사용할 수 있습니다. fun main() { //combineLatest val observable3 = Observable.interval(1000L, TimeUnit.MILLISECONDS) val observable4 = Observab..

Android/RxJava

[RxJava] 분류 연산자(Filtering Operators)

이번 포스트에서는 분류 연산자에 대해 정리하겠습니다. 분류 연산자는 통지된 데이터를 필터링 해주는 연산자입니다. debounce debounce는 짧은간격으로 연속된 이벤트가 발생하면 데이터를 전달하지 않다가 마지막 데이터가 생성된 후, 일정시간동안 다른 데이터가 생성이 되지 않는다면 데이터를 전달하는 연산자 입니다. e.g) 자동검색 등에 사용 첫번째 예시는, interval로 인해 250 밀리초 마다 데이터가 생성이 되고 debounce는 200 밀리초 로 걸려있지만, 200 밀리초 이후 계속 데이터가 들어오게 되므로 모두 정상적으로 구독이 되는 실행결과가 나타납니다. 두번째 예시는, interval 대신 intervalRange를 이용하여 250 밀리초 마다 데이터가 생성이 되고 debounce는 ..

Android/RxJava

[RxJava] 변환 연산자(Transforming Operators)

변환 연산자는 만들어진 데이터의 흐름을 변환하는 연산자 입니다. buffer buffer는 데이터를 바로 전달하지 않고 buffer의 size만큼 모일 때 까지 기다렸다가 List의 형태로 데이터를 방출하는 연산자입니다. count는 몇개씩 모아서 방출할 건지를 정하는 변수이고 skip은 몇개의 데이터가 모아졌을 때 전달할 건지 정하는 변수입니다. 뒤로가기 키를 눌렀을 때 호출되는 메소드인 onBackPressed()에서 buffer 연산자를 이용해서 두개의 시간값을 비교해서 뒤로가기를 빠르게 눌렀을 때 종료하는 기능을 만들 수 있습니다. fun main() { Observable.fromIterable(0..10) .buffer(2, 1) .subscribe { println(it)} Thread.sl..

Android/RxJava

[RxJava] 생성 연산자(Creating Operators)

이번 포스트에서는 생성 연산자를 정리하겠습니다. just just는 인자로 받은 데이터들을 순서대로 통지하는 Observable을 생성하는 연산자 입니다. 주의할 점은, just 연산자는 Observable의 생성시점이 선언한 시점이기 때문에 원하는 동작으로 수행되지 않을 수 있으므로 사용할 때 주의해야 합니다. 그러므로, just 연산자 혹은 from 연산자를 사용해야할 경우에는 Observable을 지연생성해주는 create, fromCallable을 사용하거나 defer로 감싸주는 것을 권장합니다. fun main() { Observable .just(0,1,2,3) .map { it * 2} .subscribe { println(it) } } 실행결과 craete create는 Observable..

Android/RxJava

[RxJava] 생산자와 소비자 정리

RxJava는 데이터를 만들고 통지하는 생산자와 통지된 데이터를 받아 처리하는 소비자로 구성됩니다. 이 생산자를 소비자가 구독해 생산자가 통지한 데이터를 소비자가 받게 됩니다. RxJava에서 이 생산자와 소비자의 관계는 크게 두 가지로 나뉩니다. 하나는 Reactive Streams를 지원하는 Flowable과 Subscriber, 다른 하나는 Reactive Streams를 지원하지 않고 배압 기능이 없는 Observable과 Observer입니다. 구분 생산자 소비자 Reactive Streams 지원 Flowable Subscriber Reactive Streams 미지원 Observable Observer Flowable은 Reactive Streams의 생산자인 Publisher를 구현한 클래..

Android/RxJava

[RxJava] Reactive Programming과 Rxjava 개념 정리

RxJava 개념정리에 대한 포스트들을 정리할 때 참고한 책은 스다 토모유키님이 쓰신 RxJava 리액티브 프로그래밍이고 StudyFork(정석준님 안드로이드 스터디)에서 진행한 RxJava 스터디에서 공부한 내용 또한 같이 정리하였습니다. Reactive Programming이란? Rxjava를 공부하기에 앞서서 Reactive Programming이란 무엇인가에 대해 알아야 할 필요가 있습니다. Reactive Programming이란, 데이터가 통지될 때마다 관련 프로그램이 반응(Reaction)해 데이터를 처리하는 프로그래밍 방식입니다. 예를 들면, GPS 위치 정보가 변경될 때의 데이터 전송 흐름을 상상해보면 이해가 쉽습니다. 이동해 위치 정보가 변경될 때마다 데이터를 전송하고 이동을 멈추면 데..

반응형
seunghwaan
'RxJava' 태그의 글 목록