Agera vs RxJava

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

Transcript of Agera vs RxJava

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.