agera vs rxjava
TRANSCRIPT
![Page 1: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/1.jpg)
Agera vs RxJava(안드로이드양 Reactive 를 꿈꾸는가?)
TossLab, GDE 정승욱
![Page 2: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/2.jpg)
Agera
Reactive Android
Observable, Supplier, Receiver, Updatable 개념이 있음
Observable : 데이터 감시 대상을 지정하는 객체
Supplier : 데이터를 생산함
Receiver : 변경된 데이터를 받음
Updatable : 데이터를 전달받는 객체
![Page 3: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/3.jpg)
Repository
Observable 과 Supplier 를 상속
내부에 데이터를 가지고 있음
데이터가 변경되면(Observable) Stream 의 시작함 (Supplier)
![Page 4: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/4.jpg)
Simple Repository
Repositories.mutableRepository(0)Repositories.repository(0)
데이터의 소유와 전달을 주목적으로 하는 간단한 기능의 Repository
![Page 5: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/5.jpg)
Result
Agera 에서 새로 생긴 결과 값을 저장하기 위한 객체
public boolean isPresent()public boolean isAbsent()public T get()public boolean succeeded()public boolean failed()
![Page 6: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/6.jpg)
Complex Repository
데이터 흐름 과정에서 생성, 변경 에러 처리등을 할 수 있도록 해주는 Repository
Builder 형태로 Stream 순서를 정의 후 사용 할 수 있음
![Page 7: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/7.jpg)
Complex Repository 알아보기
초기 값 선언
![Page 8: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/8.jpg)
Complex Repository 알아보기
데이터 변화를 감지할 대상 지정
![Page 9: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/9.jpg)
Complex Repository 알아보기
최종 Consume 단계에서 즉시처리 or Delay 처리 정의
![Page 10: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/10.jpg)
Complex Repository 알아보기
다음 로직을 어떤 쓰레드로 처리할지 정의
![Page 11: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/11.jpg)
Complex Repository 알아보기
데이터 처리 방식 정의
![Page 12: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/12.jpg)
Complex Repository 알아보기
수행 정의 완료
![Page 13: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/13.jpg)
Repository Compile 시 데이터 제어 함수
이전 데이터에 상관없이 새로운 데이터 시작
![Page 14: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/14.jpg)
Repository Compile 시 데이터 제어 함수
이전 데이터를 기반으로 데이터 변형
![Page 15: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/15.jpg)
Repository Compile 시 데이터 제어 함수
이전 데이터를 기반으로 새로운 데이터를 생성해서 합성한다
![Page 16: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/16.jpg)
Repository Compile 시 데이터 제어 함수
데이터를 새로운 Receiver 로 전달함
![Page 17: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/17.jpg)
Repository Compile 시 데이터 제어 함수
데이터를 계속 처리할지 말지를 정의
![Page 18: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/18.jpg)
Repository Compile 시 데이터 제어 함수
● attemptXXX○ 결과 값을 Result<T> 로 받는 함수 (success/fail 여부를 포함한 객체)○ attemptXXX().orXXX 가 항상 붙는다
● thenXXX, thenAttemptXXX○ Stream 을 최종적으로 Consume 함
![Page 19: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/19.jpg)
Complex Repository 다시 보기
repository 내부 데이터가 변경되면 Stream 시작
![Page 20: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/20.jpg)
Complex Repository 다시 보기
dispatch-update 는 Delay 없이 수행하도록 호출
![Page 21: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/21.jpg)
Complex Repository 다시 보기
백그라운드 쓰레드로 수행 시작!
![Page 22: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/22.jpg)
Complex Repository 다시 보기
repository 로부터 데이터를 받아옴
![Page 23: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/23.jpg)
Complex Repository 다시 보기
서버 통신해서 데이터 받아옴. 실패하면 Result.failure() 전달
![Page 24: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/24.jpg)
Complex Repository 다시 보기
failure 면 중단
![Page 25: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/25.jpg)
Complex Repository 다시 보기
마지막으로 데이터 변경 한번더
![Page 26: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/26.jpg)
Complex Repository 다시 보기
thenTransform 에서 반환된 데이터를 저장하는 Repository
![Page 27: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/27.jpg)
Complex Repository 다시 보기
resultRepository 가 변경되면 처리할 것 정의
![Page 28: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/28.jpg)
Complex Repository 다시 보기
스트림의 시작. repository 의 데이터 변경함
![Page 29: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/29.jpg)
RxJava 로 변경하면?
![Page 30: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/31.jpg)
결론
![Page 32: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/32.jpg)
Agera 는 Architecture 라이브러리를 지향한다.
![Page 33: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/33.jpg)
하지만 아직 Agera 는 Sliver Bullet 이 아니다.
![Page 34: Agera vs RxJava](https://reader036.vdocuments.net/reader036/viewer/2022062523/58f9b34a760da3da068bd49a/html5/thumbnails/34.jpg)
참고 자료
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.