일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Kotlin
- NDK
- C
- Android
- 알고리즘
- Django REST framework
- RxAndroid
- C++
- RxJava
- kodility
- mfc
- Java
- livedata
- Django REST Android
- 프로그래머스
- Android P
- flutter firestore
- 안드로이드 구글맵
- Rxjava2
- UWP
- android architecture component
- 안드로이드
- 코틀린
- FLUTTER
- android push
- Flutter TextField
- Django REST
- dart
- Python
- C/C++
- Today
- Total
개발하는 두더지
[Rxjava2] Observable, Flowable 본문
Rxjava 2.x의 위키에 Observable 과 Flowable의 선택 기준이 공개되어있습니다.
Observable을 선택하는 기준
- 최대 1000개 미만의 데이터 흐름, Out of Memory Exception 이 발생할 확률이 적은 경우
- 마우스, 터치 이벤트를 다루는 GUI 프로그래밍, 초당 1000회 이하의 이벤트를 다룸
Flowable을 선택하는 기준
- 10000개 이상의 데이터를 처리하는 경우, 메서드 체인에서 데이터 소스에 데이터 개수 제한을 요청해야 함
- 디스크에서 파일을 읽어 들일 경우
- JDBC를 활용해 데이터베이스의 쿼리 결과를 가져오는 경우
- 네트워크 I/O를 실행하는 경우 ( 서버에서 가져오길 원하는 만큼의 데이터양을 요청할 수 있을 때 )
디스크, 네트워크에서 I/O, 데이터베이스 쿼리 결과 가져오기 등은 Cold Observable 입니다. Cold Observable은 데이터를 조금씩 가져오는 것이 아니라 한번에 가져옵니다. 이 경우 반드시 Flowable을 써야하는 것은 아니고 배압의 이슈가 작다( 발행속도와 처리속도 차이가 작을 때 )면 Observable을 활용해도 됩니다.
데이터 발행과 처리 속도가 차이나더라도 흐름 제어 함수 ( sample(), throttle(), debounce() ) 를 활용하고
어려울 경우 Flowable을 사용하면 됩니다.
Flowable을 활용한 배압 이슈 대응
- onBackpressureBuffer() 배압 이슈가 발생하면 버퍼에 저장
- onBackpressureDrop() 배압 이슈가 발생하면 데이터 무시
- onBackpressureLatest() 처리할 수 없어서 쌓이는 데이터를 무시하면서 최신 데이터만 유지
배압이슈(Backpressure Issue)란?
Hot Observable을 처리할 때 업스트림에서 데이터 발행과 다운스트림에서 데이터를 처리하는 속도의 차이가 현저한 경우 발생하는 문제
Rxjava 2.x 는 Flowable 클래스의 배압 이슈 대응 메서드를 이용하여 처리합니다. 하지만 이슈가 근본적으로 해결되는 것은 아닙니다.
오히려 흐름 제어 메서드 ( sample, throttle, debounce, buffer )를 이용하여 처리하는 것이 더욱 현명한 방법입니다.
참고
RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에
'Java,Android' 카테고리의 다른 글
[Android] 안드로이드 뷰가 그려지는 과정 (0) | 2018.06.15 |
---|---|
[Rxjava2] Rxjava2 를 이용한 로또 번호 당첨 결과 확인하기 (0) | 2018.06.14 |
[Android, Gradle] Android Studio에서 여러개의 Jar 파일을 하나의 Jar 파일로 만들기 (0) | 2018.05.15 |
[Android] Ripple Effect 란? (0) | 2018.05.08 |
[Java/Android] RxJava2 의 Subject 종류들과 ConnectableObservable (0) | 2018.05.04 |