티스토리 뷰

안녕하세요. 오늘은 Observable의 종류에 대해 알아보겠습니다.
차근차근 천천히 따라오세요!

Single

Observable의 특수한 형태로 데이터를 무한히 발행하는 기존의 Observable과 달리
Single은 오직 1개의 데이터만 발행할 수 있습니다.
Single은 보통 결과가 유일한 서버 API호출을 할 때 유용하게 사용됩니다.

Single을 만드는 방법은 just()함수와 Observable에서 Single클래스를 활용하는 방법이 있습니다.

//just()를 이용하는 방법
Single.just("data").subscribe(::print)

//Single 클래스를 이용하는 방법

//기존의 Observable을 Single로 변환
val source = Observable.just("hello world")
Single.fromObservable(source)
    .subscribe(::print)

//Observable의 single()함수 이용
// single()함수는 default value를 받아
// 값이 발행되지 않는 상황에서 default value를 반환합니다.
Observable.just("hello world")
    .single("default value") 
    .subscribe(::print)

//Observable의 first()함수 이용
Observable.just("hello world", "nice to")
    .first()
    .subscribe(::print)

//empty Observable을 이용하여 생성
Observable.empty()
    .single("default value") 
    .subscribe(::print)

// take()를 이용한 Single 생성
Observable.just("hello world", "nice to meet")
    .take(1)
       .single("default")
    .subscribe(::print)

다양하죠? 앞으로 배울 리액티브 연산자를 활용하면 더욱 다양한 방법으로 만들 수 있습니다.
여기서 잠깐! 여러개의 값을 반환하는 Observable을 single()을 사용하여
Single을 만들려고 하였다면 오류가 발생합니다. 이 점 유의!

Maybe

Observable의 또 다른 특수한 형태로 0 혹은 1개의 데이터를 발행합니다.
보통 리액티브 연산자에서 활용되니 Maybe가 이런것이다 라고만 알아주세요!

Subject

Subject는 Observable과 구독자의 속성 모두 있습니다. (조금 어렵죠?)
쉽게 말해 Subject는 어떠한 Observable을 구독할 수 있으며 구독 당할 수 있습니다.
여러개의 Observable을 한 개의 Subject가 구독하며 이 Subject를 구독하면
한 Observable만 구독하면 여러개의 Observable의 값을 모두 구독할 수 있습니다.

보통 안드로이드의 MVVM패턴에서 Subject를 잘 활용하니 알아두세요!

이제 종류에 대해 간단히 알아보겠습니다.

  1. AsyncSubject
    Observable이 마지막으로 발행한 데이터만을 얻어 올 수 있습니다.
    이전에 발행되는 모든 데이터를 무시합니다.
    또한 OnComplete 이벤트가 호출되어도 구독만 하면 마지막 데이터를 얻어 올 수 있습니다.

  2. BehaviorSubject
    가장 최근 값 혹은 기본 값을 넘겨주고 이 후 값을 받을 수 있습니다.

  3. PublishSubject 해당 시간에 발생한 데이터를 그대로 구독자에게 전달하는 평범한 Subject입니다.

  4. ReplaySubject
    뜨거운 Observable을 차가운 Observable로 바꾸는 역할을 하는 Subject입니다.
    ReplaySubject는 들어오는 모든 데이터를 저장하여 구독자가 새로 생기면
    이전의 값 모두를 발행합니다. (이후 기존의 Subject처럼 데이터를 구독합니다.)

어떠셨나요? Subject에 대한 이해가 되지 않는다면 직접 코드를 쳐보시고
동작을 확인하는 것도 좋은 방법입니다.
또한 뜨거운 Observable과 차가운 Observable에 관한 글을 읽어보시면
Subject를 왜 사용하는지에 대해 조금은 감이 잡히실 것이라고 생각합니다.

질문 댓글에 남겨주시면 아는 만큼 답변하겠습니다.

감사합니다.

'기술 및 라이브러리 소개' 카테고리의 다른 글

Git 간단 소개  (0) 2018.05.24
WebRTC란?  (1) 2018.05.20
RxJava - Observable 생성 함수  (0) 2018.05.17
RecyclerView LayoutManager 소개  (0) 2018.05.14
RecyclerView - 안드로이드의 새로운 리스트 뷰  (0) 2018.05.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday