본문 바로가기

gyub's 공부일기/RxJava

[RxJava] Single 클래스, Maybe 클래스, 뜨거운 Observable

1. Single 클래스

Single클래스는 데이터를 무한하게 발행할 수 있는 Observable과 달리 오직 1개의 데이터만 발행하도록 한정합니다.

보통 결과가 유일한 서버 API를 호출할 때 유용하게 쓰이죠

중요한건 데이터 하나가 발행과 동시에 종료(onSuccess)된다는 점입니다.

라이프 사이클 관점에서 보면 onNext()와 onComplete() 함수가 onSuccess() 함수로 통합된 것입니다.

따라서 Single 클래스의 라이프 tkldzmf 함수는 onSuccess(T value) 함수와 onError() 함수로 구성됩니다

 

1) just()

Single 클래스는 Observable과 거의 같은 방법으로 활용할 수 있어요! (  Single클래스가 Observable의 특수한 형태이기 때문입니다)

source = Single.just("Hello Single")
source.subscribe(System.out::println)

// result
// Hello Single

가장 간단한 방법은 역시나 정적 팩토리 함수 just()를 호출하는 것입니다.

 

2) Observable에서 Single 클래스 사용

Single은 Observable에서 변환이 가능해여!

 

예시를 몇개 보겠습니다

source = Observable.just("Hello Single")
Single.fromObservable(source)
.subscribe(System::println)
// Hello Single


Observable.just("Hello Single")
.single("default item")
.subscribe(System::println)
// Hello Single

colors = arrayOf("Red","Blue","Green")
Observable.fromArray(colors)
.first("default value") // first만 있습니다 ( second등은 없어유)
.subscribe(System::println)
// Red

Observable.empty()
.single("default item")
.subscribe(System::println)
// default item

 

2. Maybe 클래스

Maybe클래스는 Rxjava 2에 처음 도입된 Observable의 또 다른 특수 형태입니다. 단어 뜻 그대로 아마도라는 뜻이쥬

이 뜻처럼 Single 클래스와 마찬가지로 최대 데이터 하나를 가질 수 있지만 e데이터 발행 없이 바로 데이터 발생을 완료(Single 클래스는 1개 완료, Maybe 클래스는 0 혹은 1개 완료) 할 수도 있습니다.

-> 위에 코드를 보면 알 수 있듯이(.single("default item")) Single은 무조건 한 개가 있어야됩니다.

 

자세한 내용은 다다다다다음글에서 다시 다룰게여

 

3. 뜨거운 Observable

Observable에는 뜨거운 Observable과 차가운 Observable이 있습니다.

 

차가운 Observable은 말 그대로 차가운!!!냉동식품과 같아여

Observable을 선언하고 just(), fromArray()함수를 호출해도 옵저버가 subscribe() 함수를 호출하여 녹이지(구독하지) 않으면 데이터를 발행하지 않아요. 이걸 다른 말로 게으른 (lazy) 접근법이라고 합니다.

 

이것의 예로는 웹 요청, DB 쿼리와 파일 읽기 등입니다. 보통 내가 원하는 URL이나 데이터를 지정하면 그때부터 서버나 데이터베이스 서버에 요청을 보내고 결과를 받아옵니다.

 

지금까지 나왔던 Observable은 모두 차가운 Observable입니다.

 

그러면!!! 차가운이 있으니까 뜨거운도 있지 않나요?? 네 있습니다( 자문자답 👀)

뜨거운 Observable의 예는 마우스 이벤트, 키보드 이벤트, 주식 가격등이 있습니다!

이러한 뜨거운 Observable에는 주의할 점이 있는데 배압이라는 것입니다. 이것또한 다다다다다다다음글에서 다룰게여

미리 간단하게 말씀드리자면 배압은 Observable에서 데이터를 발행하는 속도와 구독자가 처리하는 속도의 차이가 클 때 발생합니다.!!

 

 

차가운 Observable을 뜨거운 Observable객체로 변환하는 방법은 Subject객체를 만들거나 ConnectableObservable 클래스를 활용하는 것입니다.

 

Subject 클래스와 ConnectableObservable클래스는 다음 글에서 다뤄보도록 할게유

반응형