티스토리 뷰

Observable

Rx 하면 떠오르는 가장 유명한 클래스

input data를 여러개 가질 수 있다.

 

데이터가 발행될 때 마다 onNext() 를 호출하며, 

모든 데이터가 발행 된 후 onComplete() 를 호출하고 dispose() 한다.dd

 

< 간단한 사용 예 >

println("========== Observable test ==========")
Observable.just("i", "am", "ywlee", "861009")
  .subscribe(
    {
      // onNext()
      println("onNext() = ${it}")
    }, {
      // onError()
      println("onError() ${it.localizedMessage}")
    }, {
      // onComplete()
      println("onComplete()")
    }
  )

< 출력 >

========== Observable test ==========
onNext() = i
onNext() = am
onNext() = ywlee
onNext() = 861009
onComplete()

 


Maybe

데이터가 존재할 경우 onSuccess(), 없을 경우 onComplete() 호출

 

< 간단 예 >

println("========== Maybe test ==========")
Maybe.just("i")
.subscribe(
    {
      // on Success
      println(it)
    }, {
      // on Error
      println(it)
    }, {
      // on Complete
      println("onComplete")
    }
  )

데이터를 하나만 가질 수 있으니 String 하나만 넣었다.

 

< 출력 >

========== Maybe test ==========
i

 

< 간단 예 2 >

println("========== Maybe test ==========")
Maybe.just(null)
  .subscribe(
    {
      // on Success
      println(it)
    }, {
      // on Error
      println(it)
    }, {
      // on Complete
      println("onComplete")
    }
  )

하지만 위와 같이 just 자체에 null 을 넣으면,

 

< 출력 >

========== Maybe test ==========

java.lang.NullPointerException: item is null

	at io.reactivex.internal.functions.ObjectHelper.requireNonNull(ObjectHelper.java:39)
	at io.reactivex.Maybe.just(Maybe.java:891)
    .....

위와 같이 NPE 가 발생하며 강종크리를 맞는다.

 

 

< 간단 예 3 >

println("========== Maybe test ==========")
Maybe.fromCallable {
  	return@fromCallable null
  }
  .subscribe(
    {
      // on Success
      println(it)
    }, {
      // on Error
      println(it)
    }, {
      // on Complete
      println("onComplete")
    }
  )

fromCallable 로 nullable String 에 null 을 넣어서 보내면,

 

< 출력 >

========== Maybe test ==========
onComplete

위와 같이 바로 onComplete() 가 호출된다.


Single

1번의 데이터 흐름만을 가질 때 사용하는 Observable class

Observable 이 여러번의 데이터 흐름 (onNext()...onNext()...onNext()........onComplete()...) 를 가진다면,

Single 은 (onSuccess(), onError()) 만을 가진다.

보통 api 호출의 경우 한번의 response를 가지기 때문에 single 을 많이 사용한다고 한다.

 

< 간단 예 >

println("========== Single test ==========")
Single.just("ywlee")
    .subscribe({
        // onSuccess
        println(it)
    }, {
        // onError
        println(it)
    })

 

< 출력 >

========== Single test ==========
ywlee

단 한번의 호출로 success, error 로 나뉜다.


Completable

데이터를 발행하지 않고, 그냥 Observable 을 부르고 싶을 때.

어떠한 input 없이 비동기로 작업을 실행하고 싶을 때 사용한다.

주로, 특정 시간마다 비동기 작업이 반복되어야 하는 경우에 사용한다고 함.

 

< 간단 예 >

println("========== Completable test ==========")
Completable.complete()
    .subscribe({
        // onComplete
        println("this is completable")
    }, {
        // onError
        println(it)
    })

 

< 출력 >

========== Completable test ==========
this is completable

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함