일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ViewModel
- retrofit2
- MotionEvent
- javascript
- Android
- 실행지연
- UIPickerView
- CSS
- Alamofire
- RecyclerView
- progressbar
- SplashFragment
- HTML
- 개발
- dispatchQueue
- Dropdown
- InAppPurchase
- SWIFT
- CalendarView
- IOS
- MemoList
- ayncAfter
- web
- RxJava
- DispatchTouchEvent
- Kotlin
- aab
- 스터디
- viewpager2
- imagepicker
- Today
- Total
멜팅비의 개발 공부
RxJava 기본 개념 및 구조 본문
최근 프로젝트에서 RxJava + Dagger + MVVM 패턴 + LiveData + Databinding 등을 접하게 되었는데
아직 안드로이드 초보 개발자로서 모르는 게 너무 많아서 조금씩 스터디를 하게 되었고, 그때 정리해둔 내용(틀린 부분이 많을 수도 있음)
ReactiveX
: 비동기적 데이터 흐름을 처리하는 프로그래밍 (Observable 시퀀스를 이용해 이벤트를 처리)
Reactive Programming
- 프로그램에서 필요한 데이터를 직접 가지고와서 처리하는 방식이 아닌, 데이터를 받은 시점에서 처리하는 방식
- 데이터를 만들어내는 생산자와 이를 소비하는 소비자로 역할을 나눠 처리하는 프로세스를 가짐
- 생산자 - 데이터를 생산하여 전달하는 역할까지 수행 소비자 - 데이터를 받아서 처리하는 역할만 수행 역할의 분리 > 비동기 구현 가능
구성
-
Publisher와 Subscriber로 구성 Subscriber가 Publisher를 구독하면 Publisher가 통보하는 데이터를 받을 수 있음
-
흐름
- 구독(subscribe)
- 데이터 통보 준비 완료 (onSubscribe)
- 데이터 요청 (Subscription.request)
- 데이터 생산
- 데이터 통보 (onNext)
- 통보받은 데이터 처리
- 데이터 요청
- 데이터 통보 완료 (onComplete) or
- 에러 통보 (onError)
-
구독이 발생하면 이에 대한 Subsciption이 생성
-
Subscriber가 Publisher를 구독하지 않으면 이후 단계는 진행되지 않는다.
-
onComplete, onError와 같은 확정 Action이 발생하면 소비자에게 통보
-
Subscriber는 Publisher에게 받을 데이터 개수를 요청할 수 있으며, 요청받은 Publisher는 다시 데이터를 생산하여 Subscriber에게 전달(onNext)
규칙
- 구독 시작 통지는 구독에서 한번만 발생
- 데이터 통지는 순차적으로 이뤄짐
- null을 통지하지 않음
- Publisher는 처리완료 혹은 에러를 통하여 종료
ReactiveStream 지원 → 생산자 : Flowable / 소비자 : Subsciber / 관계 : Subscription
ReactiveStream 미지원 → 생산자 : Observable / 소비자 : Observer / 관계 : Disposable
Flowable
: Observable과 같은 RxJava에서 쓰이는 관찰 가능한 객체, backpressure를 처리할 수 있음 (backpressure : 생산자 속도가 빨라서 값을 처리하지 못하는 상황 = Observer에게 방출되는 Data가 너무 많아 처리하지 못함 Memory Leak 발생)
- 대량 데이터를 처리 할 경우
- 네트워크 통신/파일 등 IO를 처리할 경우
Observable
: 옵저버 패턴을 사용 > rx의 Observer는 Observable을 구독
- GUI 이벤트
- 소량의 데이터를 처리할 경우
3가지 알림을 구독자에게 전달
- onNext : Observable이 데이터 발행을 알림
- onError : error가 발생했음을 알리고 Observable을 종료
- onCompleted : 모든 이벤트가 발행을 완료했음을 알림(이벤트 발생 후 onNext를 발행하면 안 됨)
표준 인터페이스
- Publisher : 데이터 생성/통보
- Subscriber : 데이터 처리
- Subscription : 데이터 요청/구독 해지 가능 ⇒ RxJava2에서 Disposable로 바뀜
- Processor : Publisher & Subscriber의 역할을 모두 가지고 있음
Disposable
: 옵저버블을 통해 데이터 스트림을 발행하고 subscribe() 함수들을 사용하여 구독할 때 함수가 반환하는 값 = Disposable 인터페이스의 객체
- dispose() 함수 : 옵저버블에게 더 이상 데이터를 발행하지 않도록 함 = 구독해지
- clear() 함수 : add 된 옵저버블을 해지 (isDisposed()가 false이기 때문에 재사용 가능)
'개발 공부 > [Android 개발]' 카테고리의 다른 글
[Android] 안드로이드 android.view.WindowManager$BadTokenException: Unable to add window 에러 해결방법 (0) | 2021.03.02 |
---|---|
[Android-Kotlin] SplashFragment에서 화면이동하기 (0) | 2021.03.02 |
[Android-Kotlin] 안드로이드 Array를 ArrayList로 변환/ ArrayList를 Array로 변환 (0) | 2021.03.02 |
[Android-Kotlin] MotionEvent 강제 효과 주기(드래그, 스크롤) (0) | 2021.02.23 |
[Kotlin] 코틀린 let, apply, run, with 함수 간단 정리 (0) | 2021.02.20 |