RxJava
RxJava 안드로이드 프로젝트에 적용하기 02 (with Paging 3)
RxJava 안드로이드 프로젝트에 적용하기 02 (with Paging 3) Paging3 라이브러리에 RxJava를 적용하는 과정에 대한 기록. Paging3의 자세한 사용법에 대한 포스팅은 아니고, Sunflower 내에 Unsplash Api를 사용해서 사진을 가져올 때 사용한 Paging3에 대해 Flow -> RxJava로 변환하는 과정을 기록한다. 필요한 의존성들을 다음과 같이 추가한다. // Paging3 implementation "androidx.paging:paging-runtime:$paging_version" implementation "androidx.paging:paging-rxjava2:$paging_version" // Paging for RxJava // Retrofit2 ..
RxJava 안드로이드 프로젝트에 적용하기 01 (with Sunflower)
RxJava 안드로이드 프로젝트에 적용하기 (with Sunflower) RxJava에 관한 책을 정리한 후 안드로이드 프로젝트에 적용하여 학습하는 방법으로, Google의 Android Sunflower 프로젝트 내부의 코드를 Rx로 migration하는것을 목표로 한다. Coroutine Flow -> RxJava Rx는 Single, Maybe, Completable 등 활용할 수 있는 다양한 클래스가 존재한다. Single 데이터를 1건만 통지하거나 에러를 통지 데이터 통지가 곧 완료 통지이므로 별도의 완료 통지 안함 onNext와 onComplete 대신 onSuccess 제공 Maybe 데이터를 1건만 통지하거나, 1건도 통지않거나 에러 통지 데이터가 1건도 없이 정상종료 될 때만 onComp..
RxJava 06 - RxJava의 디버깅과 테스트
RxJava의 디버깅과 테스트 디버깅과 테스트 생산자가 소비자에게 통지하는 데이터는 기본적으로 외부 접근이 불가능하여 완료/에러 통지를 받아야 비로소 어떤 데이터가 어떻게 바뀌었는지 외부에서 확인할 수 있기 때문에 디버깅/테스트 하는것이 어렵다. 더욱이 비동기 처리는 여러 처리가 동시에 실행되어 실행때마다 결과가 달라질 수 있기 때문에 디버깅/테스트시 고려해야 한다. RxJava에서는 디버깅이나 테스트를 쉽게할 수 있는 여러 메서드와 클래스를 제공한다. 'do'로 시작하는 메서드 RxJava는 Flowable/Observable이 통지할 때나 통지한 이후에 특정한 부가 작용이 발생하는 메서드를 제공한다. 이런 메서드는 이름이 'doOn'이나 'doAfter'로 ..
RxJava 05 - Processor/Subject
Processor/Subject Processor/Subject란 Processor는 Reactive Streams에서 정의한 Publisher 인터페이스와 Subscriber 인터페이스를 모두 상속하는 인터페이스. Processor 인터페이스는 소비자로서 데이터를 받고 이 데이터를 생산자로서 통지하는 역할을 한다. Processor가 Publisher를 구독하면 Publisher가 통지하는 데이터를 받는 소비자가 되며, 동시에 이 Processor를 Subscriber가 구독하면, Subscriber에 데이터를 통지하는 생산자가 된다. 즉 Processor가 생산자와 소비자 사이에서 통지의 중개 역할을 한다. Processor 기본 예제 fun main() { val processor = Publish..
RxJava 04 - Flowable과 Observable의 연산자 (part.04)
Flowable/Observable을 결합하는 연산자 1. merge계열 연산자 여러 Flowable/Observable에서 받은 데이터를 하나의 Flowable/Observable로 통지하는 연산자. 여러 생산자가 동시에 데이터를 통지하더라도 결과를 통지할때는 동기화 돼 순차적으로 통지된다. fun main() { val flowable = Flowable.interval(300L, TimeUnit.MILLISECONDS).take(5) val flowable2 = Flowable.interval(500L, TimeUnit.MILLISECONDS).take(2) .map{ data -> data + 100L } val result = Flowable.merge(flowable, flowable2) re..
RxJava 04 - Flowable과 Observable의 연산자 (part.03)
RxJava 04 - Flowable과 Observable의 연산자 (part.03) 통지 데이터를 제한하는 연산자 1. filter 받은 데이터가 조건에 맞는지 판정해 true인것만 통지하는 연산자. fun main() { val flowable = Flowable.interval(300L, TimeUnit.MILLISECONDS) .filter{ data -> data % 2L == 0L } flowable.subscribe(DebugSubscriber()) Thread.sleep(3000L) }출력 결과 RxComputationThreadPool-1: 0 RxComputationThreadPool-1: 2 RxComputationThreadPool-1: 4 RxComputationThreadPool..
RxJava 04 - Flowable과 Observable의 연산자 (part.02)
RxJava Chapter 04 - Flowable과 Observable의 연산자 (part.02) 통지 데이터를 변환하는 연산자 1. map 원본 생산자에서 통지하는 데이터를 변환한 뒤 변환된 데이터를 통지하는 연산자. 한개의 데이터로 여러 데이터를 생성해 통지하거나 통지를 건너뛸 수는 없다. 반드시 null이 아닌 데이터 하나를 반환한다. fun main() { val flowable = Flowable.just("A","B","C").map { it.lowercase() } flowable.subscribe(DebugSubscriber()) }출력 결과 main: a main: b main: c main: 완료2. flatMap map과 달리 여러 데이터가 담긴 생산자를 반환하므로 데이터 한개로 여..
RxJava 04 - Flowable과 Observable의 연산자 (part.01)
RxJava Chapter 04 - Flowable과 Observable의 연산자 RxJava는 데이터 소스 역할을 하는 Flowable/Observable을 생성하는 메서드와 데이터를 변환하거나 선별하는 작업을 거쳐 새로운 Flowable/Observable을 생성하는 메서드를 제공한다. Flowable/Observable을 생성하는 연산자 1. just 인자로 받은 데이터를 통지하는 Flowable/Observable을 생성하는 연산자. 인자는 최대 10개까지 시정할 수 있으며, 순서대로 통지한다. 모든 데이터를 통지하면 완료를 통지한다. fun main() { val flowable = Flowable.just("A","B","C") flowable.subscribe(DebugSubscriber()..