RxJava에서는 Flowable, Observable외에 Single, Maybe, Completable이 있습니다. 이번 글에서는 Single, Maybe, Completable이 어떤 것인지 알아보겠습니다.

Single

전달해야 하는 데이터가 1개 일 때 사용하는 생산자입니다. 데이터를 1건만 전달하거나 에러를 전달하는 생산자로 완료에 대한 전달은 없습니다.

Single이 생산하는 데이터를 전달 받기 위해서는 SingleObserver를 사용해야 합니다.

SingleObserver (RxJava Javadoc 2.2.17)

공식 문서에서는 Provides a mechanism for receiving push-based notification of a single value or an error. (단일 값 또는 오류에 대한 푸시 기반 알림을 수신하기 위한 메커니즘을 제공합니다.) 라고 소개 하고 있습니다.

SingleObserver

fun main() {
    val single = Single.just("Hello World")
    single.subscribe(object : SingleObserver<String> {
        override fun onSuccess(t: String) {
            // 1개 전달(성공)
            println("onSuccess")
            println(t)
        }

        override fun onSubscribe(d: Disposable) {
            // 구독
            println("onSubscribe")
        }

        override fun onError(e: Throwable) {
            // 실패
            println("onError")
            e.printStackTrace()
        }
    })
}

결과화면

결과화면

Subscribe Method

SingleObserver를 직접 만들어서 subscribe 할 필요 없이 Single은 다양한 subscribe 함수들을 제공합니다. 이 함수들은 Disposable을 리턴합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4c247c4b-66f3-49c3-a500-bff4e3eb6e61/Untitled.png

Single (RxJava Javadoc 2.2.17)

fun main() {
    Single.just("Hello World")
        .subscribe { item -> println(item) } // onSuccess 만 처리
}
fun main() {
    Single.just("Hello World")
        .subscribe { item, error ->
            item?.let { println(it) } // onSuccess 처리
            error?.let { it.printStackTrace() } // onError 처리
        }
}