일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시밀란
- Device 등록
- 연금저축펀드
- 공기먹는다이버스
- 도심공항
- 아시아나
- 세비야
- 러브자그레브
- 지팍스페인
- xcode
- 강릉
- 라이브러리
- 괌 자유여행
- 리브어보드
- Gradle
- Cocoapods #PrivateRepo #SpecRepo
- 스쿠버다이빙
- 스페인여행
- 스페인광장
- 크로아티아
- 그라나다
- SwiftUI #Skeleton #데이터갱신
- 러브스플리트
- Concurrency #Swift #Combine
- Swift #Concurrency #쓰레드
- cocoapod
- swiftUI
- 대한항공
- 푸켓여행
- 스플리트
- Today
- Total
JEP's Diary
Observable 알고가기 본문
Observable 알고가기
1.Observable이란?
: 데이터 흐름에 맞게 알림을 보내 구독자가 데이터를 처리 할 수 있도록 한다.
: RxJava1.x에서는 Observable과 Single클래스로 구성
: RxJava2.x에서는 Observable, Single, Maybe, Flowable로 클래스를 구분
: Maybe클래스는 reduce()함수나 firstElement()함수와 같이 데이터가 발행 될 수 있거나 혹은 발행되지 않고도 완료되는 경우를 의미
: Flowable클래스는 Observable에서 데이터가 발행되는 속도가 구독자가 처리하는 속도보다 현저하게 빠른 경우 배압이슈에 대응하는 기능을 추가로 제공한다.
- onNext : Observable이 데이터의 발행을 알린다.
- onComplete : 모든 데이터의 발행을 완료함을 알린다. 단 한번만 발생하고, 발생한 후에는 더이상 onNext가 발생하지 않는다.
- onError : 에러가 발생했음을 알린다. 발생한 후에는 onNext, onComplete가 발생하지 않고, Observable의 실행을 종료한다.
2.subscribe()와 Disposable 객체
: Observable의 just() 함수 등 데이터흐름을 정의한 후 subscribe()함수를 호출해야 실제 데이터가 발행된다.
: dispose() 는 Observable에게 더이상 데이터를 발행하지 않도록 구독을 해지하는 함수이다. 보통 onComplete() 알림을 보냈을때 자동으로 dispose()함수가 불린다.
: subscribe() 함수의 여러 원형 모두 Disposable 인터페이스의 객체를 리턴한다.
3.생성함수
: RxJava1.x
- just() : 인자로 넣은 데이터를 차례로 발행하려고 Observable을 생성.1~N(최대10개) 개의 인자로 넣을 수 있고, 타입이 같아야한다. 자동으로 알림 이벤트가 발생한다.
- create() : onNext(), onComplete(), onError() 같은 알림을 개발자가 직접 호출해야 한다. 익숙한 사용자만 활용하도록 권고.
: RxJava2.x (from함수 세분화)
- fromArray() : 배열에 들어 있는 데이터를 처리.
- fromIterable() : 다음에 어떤 데이터가 있는지와 그 값을 얻어오는 것만 관여할 뿐 데이터 타입에 의존하지 않는 장점이 있다. ArrayList, HashSet, LinkedList, Stack, Vector등
- fromCallable() : 동시성 API인 Callable 인터페이스. 기존에 사용하던 callable객체가 있다면 Observable.fromCallable()을 활용해 바로 RxJava와 연동이 가능하다.
- fromFuture() : Future 인터페이스 역시 동시성 API로 비동기 계산의 결과를 구할 때 사용한다.
- fromPublisher() : Publisher는 자바 9의 표준인 Flow API의 일부이다. Observable.create()와 같이 onNext(), onComplete()을 호출 할 수 있다.
4.Single 클래스
: Observable클래스는 데이터를 무한하게 발행 할 수 있지만, Single 클래스는 오직 1개의 데이터만 발행 하도록 한정한다. 보통 결과가 유일한 서버 API호출할 때 사용한다.
: 데이터가 발행과 동시에 종료된다. 라이크사이클관점으로는 onNext()와 onComplete()함수가 onSuccess()함수로 통합된것.
: 라이브 사이클 함수는 onSuccess(), onError()함수
5.Maybe 클래스
: RxJava2.x에 처음 도입된 Observable의 또 다른 특수형태로 최대 데이터 하나를 가질 수 있지만 데이터 발행 없이 바로 데이터 발생을 완료할 수도 있다.
: 즉 Single클래스에 onComplete() 이벤트가 추가된 형태.
: 라이프 사이클 함수는 onSuccess(), onError(), onComplete()
: Maybe객체를 생성 할 수 있는 연산자는 elementAt(), firstElement(), flatMapMaybe(), lastElement(), reduce(), singleElement()함수 등
6.뜨거운 Observable, 차가운 Observable
: 차가운 Observable은 Observable을 선언하고 just(), fromIterable() 함수를 호출해도 옵저버가 subscribe() 함수를 호출하여 구독하지 않으면 데이터를 발행하지 않는다.
- 예는 웹 요청, 데이터 베이스쿼리, 파일 읽기 등.
: 뜨거운 Observable은 구독자가 존재여부와 관계 없이 데이터를 발행하는 Observable이다. 따라서 구독자로서는 Observable에서 발행하는 데이터를 처음부터 모두 수신한다는 보장을 받을 수 없다. 뜨거운 Observable은 구독한 시점부터 Observable에서 발행한 값을 받는다.
- 예는 마우스 이벤트, 시스템 이벤트, 센서 데이터 등
- 배압을 고려해야한다. 배압은 데이터를 발행하는 속도와 구독자가 처리하는 속도의 차이가 클 때 발생한다.
:차가운 Observable을 뜨거운 Observable로 변환하는 방법은 Subject 객체를 만들거나 ConnectableObservable클래스를 활용한다.
7.Subject 클래스
: Observable의 속성과 구독자의 속성이 모두 있다. Observable처럼 데이터를 발행할 수도 있고, 구독자처럼 발행된 데이터를 바로 처리할 수도 있다.
: AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject등이 있다.
8.ConnectableObservable 클래스
: Observable을 여러 구독자에게 공유할 수 있으므로, 원 데이터 하나를 여러 구독자에게 동시에 전달 할 때 사용한다.
: subscribe() 함수를 호출해도 아무 동작이 일어나지 않고, connect()함수를 호출한 시점부터 subscribe() 함수를 호출한 구독자에게 데이터를 발행한다.
참고 : RxJava프로그래밍 (리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에)
'Development > Reactive' 카테고리의 다른 글
스케줄러 (0) | 2018.07.28 |
---|---|
리액티브 연산자2 (0) | 2018.07.28 |
리액티브 연산자1 (0) | 2018.07.28 |
리액티브 프로그래밍 개념 (0) | 2018.07.24 |