일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 커스텀린트
- 베드트레이
- 재택근무
- 자취필수템
- 안드로이드
- 한단어의힘
- 캐치마인드
- 프래그먼트
- 1일1커밋
- 북한살둘레길
- 아비투스
- 어떻게 나답게 살 것인가
- T자형인재
- 소프시스 밤부 좌식 엑슬 테이블
- 함수형 프로그래밍
- 슬기로운 온라인 게임
- 브런치작가되기
- 면접
- 한달독서
- 끝말잇기
- 한달어스
- 좌식테이블
- 소프시스
- 목적 중심 리더십
- 한달브런치북만들기
- 목적중심리더십
- 베드테이블
- 테트리스
- 리얼하다
- 지지않는다는말
- Today
- Total
정상에서 IT를 외치다
[리엑티브 연습] Observable, Single, Maybe, Completable 본문
안녕하세요. 블랙진입니다.
리엑티브 연습 포스팅 입니다.
public abstract class Observable<T> implements ObservableSource<T>
Observable은 ObservableSource를 구현하고 있습니다. Observable을 생성할 때는 인스턴스를 직접 만들지 않고 정적 팩토리 함수를 호출합니다. 그렇게 기본 적인 just()에서 부터 정말 다양한 팩토리 함수를 가지고 있습니다.
Observable은 세 가지 상태를 구독자에게 전달합니다.
onNext
데이터 발행을 알려줍니다.
onComplete
1. 모든 데이터가 발행되었음을 알려줍니다.
2. onComplete 이후에는 onNext는 발생하지 않습니다.
3. dispoes()는 Observable에게 데이터를 더 이상 발행하지 않도록 구독을 해지하는 함수인데 onComplete 콜백이 되면 자동으로 dispose 됩니다.
onError
1. 에러 이벤트로 발생 이후에는 onNext 및 onComplete 이벤트가 발생하지 않습니다.
2. onError 또한 콜백이 되면 자동으로 dispose 됩니다.
val observable = Observable.create<Int> {
it.onNext(1)
it.onNext(2)
it.onError(error("BlackJinTest error"))
}
val disposable = observable.subscribe {
println(it)
}
println("${disposable.isDisposed}") // error 발생 후 true 리턴
3. onError() 이후 로그를 찍어 본 결과 isDisposed 는 true 가 나왔습니다.
public abstract class Single<T> implements SingleSource<T>
Single은 SingleSource를 구현하고 있습니다. Observable과 동일하게 동작되며 비슷한 함수를 가지고 있습니다. 오직 1개의 데이터만 발행합니다.
Single은 두 가지 상태를 구독자에게 전달합니다.
onSuccess
Observable의 onComplete와 동일
onError
Observable의 onError와 동일
활용 예
데이터가 발행과 동시에 onSuccess로 종료 됩니다. 데이터 1개만을 발행하기 때문에 바로 종료가 되어야겠죠?
주로 한 번의 데이터만 발행하는 API 통신에 많이 사용합니다.
@FormUrlEncoded
@POST("/blackjin/test/temp")
fun postTemp(@Field("temp1") temp1: String,
@Field("temp2") temp2: String): Single<Data>
MayBe
public abstract class Maybe<T> implements MaybeSource<T> {
Maybe는 MaybeSource를 구현하고 있습니다. Observable과 동일하게 동작되며 비슷한 함수를 가지고 있습니다. Single 처럼 하나의 데이터를 가질 수 있지만 데이터 발행 없이 완료할 수도 있습니다.
Maybe은 세 가지 상태를 구독자에게 전달합니다.
onSuccess
값이 있는 경우
Maybe.just("Maybe")
.subscribe(::println, // onSuccess
{ println(it) }, // onError
{ println("onComplete") }) // onComplete
onComplete
값이 없는 경우
Maybe.fromCallable { null }
.subscribe(::println, // onSuccess
{ println(it) }, // onError
{ println("onComplete") }) // onComplete
onError
에러가 발생한 경우
활용 예
Maybe는 언제 사용하면 좋을까요?
Completable
public abstract class Completable implements CompletableSource
Completable는 CompletableSource를 구현하고 있습니다. 역시 Observable의 발전된 모습이며 Maybe 에서 값이 없는 경우 처럼 리턴되는 값이 없습니다.
Conpletable은 두 가지 상태를 구독자에게 전달합니다.
onComplete
리턴 되는 값이 없습니다.
onError
에러가 발생한 경우
활용 예
Room 데이터 베이스 사용에서와 같이 백그라운드에서 동작해야 되는 함수가 필요한 경우 쓸 수 있습니다.
fun runOnIoScheduler(func: () -> Unit): Disposable = Completable
.fromCallable(func)
.subscribeOn(Schedulers.io())
.subscribe()
사용 코드
//room 데이터 업데이트
runOnIoScheduler { todoDao.update(todo) }
//room 데이터 삭제
runOnIoScheduler { todoDao.delete(todo) }
'안드로이드' 카테고리의 다른 글
[리엑티브 연습] flatMap, concatMap, switchMap (1) | 2019.06.25 |
---|---|
[리엑티브 연습] AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject (0) | 2019.06.25 |
[스트림 연습] Kotlin Collection Example (0) | 2019.06.25 |
[리엑티브 연습] merage, debounce (로그인 예제) (0) | 2019.06.24 |
[in-app updates] 안드로이드 인 앱 업데이트 사용기 (21) | 2019.06.21 |