728x90
Single
Observable과 다르게 단 하나의 아이템만 발행한다. 따라서 just() 연산자는 하나의 인자만 가질 수 있다.
Single.just("Hello World")
.subscribe(System.out::println)
create() 연산자를 사용 시에는 데이터를 한 번만 발행하므로 onNext()와 onComplete()을 호출하는 대신 onSuccess(T)을 호출한다. 오류 같은 경우에는 onError() 호출하는 것은 동일하다.
Single.create<String> { emitter ->
emitter.onSuccess("Hello")
}.subscribe(System.out::println)
Observable -> Single
Observable에서 Single로 변환하는 방법으로는 all, first, toList이 있다.
val src = Observable.just(1,2,3)
val singleSrc1 = src.all { i -> i > 0 }
val singleSrc2 = src.first(-1)
val singleSrc3 = src.toList()
Single -> Observable
Single에서 Observable으로 변환하는 방법으로는 toObservable()가 있다.
val singleSrc: Single<String> = Single.just("Hello World")
val observableSrc: Observable<String> = singleSrc.toObservable()
Single은 단일 아이템을 발행한다느 점에서 Http 통신에서도 많이 사용한다.
Maybe
Single과 비슷하지만 아이템을 발행하거나 발행하지 않을 수도 있다는 점에서 차이가 있다. 아이템을 발행할 때는 onSuccess(T)를 호출하고, 발행하지 않을 때에는 onComplete(T)를 호출한다. 따라서 onSuccess(T)를 호출할 경우에는 따로 onComplete(T)를 호출할 필요가 없다.
Maybe.create<Int> { emitter ->
emitter.onSuccess(100)
emitter.onComplete() //무시
}
.doOnSuccess { item ->
System.out.println("doOnSuccess")
}
.doOnComplete {
System.out.println("doComplete")
}
.subscribe(System.out::println)
// doOnSuccess
// 100
Maybe.create<Int> { emitter ->
emitter.onComplete()
}
.doOnSuccess { item -> System.out.println("doOnSuccess") }
.doOnComplete { System.out.println("doComplete") }
.subscribe(System.out::println)
// doComplete
Completable
아이템을 발행하지 않고 단지 정상적으로 실행이 종료되었는지에만 관심을 갖는다. 따라서 Emitter에 onNext(), onSuccess()는 존재하지 않고 onComplete(), onError()만 존재한다.
Completable.create { emitter ->
emitter.onComplete()
}.subscribe{
System.out.println("complete1")
}
// complete1
참고 : 옥수환 지음[아키텍처를 알아야 앱 개발이 보인다]
'Android > RxJava' 카테고리의 다른 글
[차근차근 RxJava 기록 5] Observable을 생성하는 연산자 (0) | 2022.01.24 |
---|---|
[차근차근 RxJava 기록 4] Cold Observable과 Hot Observable (0) | 2022.01.24 |
[차근차근 RxJava 기록 2] Observable의 이벤트와 생성 (0) | 2022.01.21 |
[차근차근 RxJava 기록 1] RxJava는 무엇인가? (0) | 2022.01.19 |