Top Banner
Agera vs RxJava (안드로이드양 Reactive 꿈꾸는가?) TossLab, GDE 정승욱
34

Agera vs RxJava

Apr 21, 2017

Download

Internet

SeongUg Jung
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Agera vs RxJava

Agera vs RxJava(안드로이드양 Reactive 를 꿈꾸는가?)

TossLab, GDE 정승욱

Page 2: Agera vs RxJava

Agera

Reactive Android

Observable, Supplier, Receiver, Updatable 개념이 있음

Observable : 데이터 감시 대상을 지정하는 객체

Supplier : 데이터를 생산함

Receiver : 변경된 데이터를 받음

Updatable : 데이터를 전달받는 객체

Page 3: Agera vs RxJava

Repository

Observable 과 Supplier 를 상속

내부에 데이터를 가지고 있음

데이터가 변경되면(Observable) Stream 의 시작함 (Supplier)

Page 4: Agera vs RxJava

Simple Repository

Repositories.mutableRepository(0)Repositories.repository(0)

데이터의 소유와 전달을 주목적으로 하는 간단한 기능의 Repository

Page 5: Agera vs RxJava

Result

Agera 에서 새로 생긴 결과 값을 저장하기 위한 객체

public boolean isPresent()public boolean isAbsent()public T get()public boolean succeeded()public boolean failed()

Page 6: Agera vs RxJava

Complex Repository

데이터 흐름 과정에서 생성, 변경 에러 처리등을 할 수 있도록 해주는 Repository

Builder 형태로 Stream 순서를 정의 후 사용 할 수 있음

Page 7: Agera vs RxJava

Complex Repository 알아보기

초기 값 선언

Page 8: Agera vs RxJava

Complex Repository 알아보기

데이터 변화를 감지할 대상 지정

Page 9: Agera vs RxJava

Complex Repository 알아보기

최종 Consume 단계에서 즉시처리 or Delay 처리 정의

Page 10: Agera vs RxJava

Complex Repository 알아보기

다음 로직을 어떤 쓰레드로 처리할지 정의

Page 11: Agera vs RxJava

Complex Repository 알아보기

데이터 처리 방식 정의

Page 12: Agera vs RxJava

Complex Repository 알아보기

수행 정의 완료

Page 13: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

이전 데이터에 상관없이 새로운 데이터 시작

Page 14: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

이전 데이터를 기반으로 데이터 변형

Page 15: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

이전 데이터를 기반으로 새로운 데이터를 생성해서 합성한다

Page 16: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

데이터를 새로운 Receiver 로 전달함

Page 17: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

데이터를 계속 처리할지 말지를 정의

Page 18: Agera vs RxJava

Repository Compile 시 데이터 제어 함수

● attemptXXX○ 결과 값을 Result<T> 로 받는 함수 (success/fail 여부를 포함한 객체)○ attemptXXX().orXXX 가 항상 붙는다

● thenXXX, thenAttemptXXX○ Stream 을 최종적으로 Consume 함

Page 19: Agera vs RxJava

Complex Repository 다시 보기

repository 내부 데이터가 변경되면 Stream 시작

Page 20: Agera vs RxJava

Complex Repository 다시 보기

dispatch-update 는 Delay 없이 수행하도록 호출

Page 21: Agera vs RxJava

Complex Repository 다시 보기

백그라운드 쓰레드로 수행 시작!

Page 22: Agera vs RxJava

Complex Repository 다시 보기

repository 로부터 데이터를 받아옴

Page 23: Agera vs RxJava

Complex Repository 다시 보기

서버 통신해서 데이터 받아옴. 실패하면 Result.failure() 전달

Page 24: Agera vs RxJava

Complex Repository 다시 보기

failure 면 중단

Page 25: Agera vs RxJava

Complex Repository 다시 보기

마지막으로 데이터 변경 한번더

Page 26: Agera vs RxJava

Complex Repository 다시 보기

thenTransform 에서 반환된 데이터를 저장하는 Repository

Page 27: Agera vs RxJava

Complex Repository 다시 보기

resultRepository 가 변경되면 처리할 것 정의

Page 28: Agera vs RxJava

Complex Repository 다시 보기

스트림의 시작. repository 의 데이터 변경함

Page 29: Agera vs RxJava

RxJava 로 변경하면?

Page 30: Agera vs RxJava

Agera

1. Receiver + Observable2. goTo, onUpdatePerLoop3. getFrom4. transfrom5. mergeIn6. sendTo(xxx)7. check8. thenXXX9. xxx.accept

1. BehaviorSubject + distinctUntilChange2. observerOn3. concatMap4. map5. combinelatest6. xxx.onNext7. filter8. map, ..etc + subscribe9. xxx.onNext

RxJava

Page 31: Agera vs RxJava

결론

Page 32: Agera vs RxJava

Agera 는 Architecture 라이브러리를 지향한다.

Page 33: Agera vs RxJava

하지만 아직 Agera 는 Sliver Bullet 이 아니다.

Page 34: Agera vs RxJava

참고 자료

Ageragithub : https://github.com/google/ageracodlab : https://codelabs.developers.google.com/codelabs/android-agera/

Agera vs RxJava Samplegithub : https://github.com/ZeroBrain/RxJava-Agera-Sample

Agera 에 대한 RxJava 커미터의 의견http://akarnokd.blogspot.kr/2016/04/google-agera-vs-reactivex.htmltl;dr - Google makes wheel again.