Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

혼자 있고 싶네요. 모두 나가주세요.

005. Connectable Observable 본문

타닥타닥/RxJava

005. Connectable Observable

아무것도몰라양 2017. 7. 5. 20:10

참조 : [https://github.com/ReactiveX/RxJava/wiki/Connectable-Observable-Operators]

Connectable Observable

ConnectableObservable과 operator에 대해 아라보자.

  • ConnectableObservable.connect( ) — Connectable Observable이 결과를 뱉기 시작하도록 명령한다.
  • Observable.publish( ) — Observable을 Connectable Observable로서 표현한다.
  • Observable.replay( ) — 모든 Subscribers들이 같은 일련의 아이템들을 볼 수 있도록 보장한다. 심지어 이미 배출된 아이템이 있더라도 처음부터 보여준다.
  • ConnectableObservable.refCount( ) — Connectable Observable이 일반적인 Observable 처럼 행동하게 한다.

Connectable Observable은 일반적인 Observable과 유사하지만, Connect() method가 호출되는 것이 아니라면, Subscribe를 하던 말던 아이템 배출을 시작하지 않는다는 점이 다르다. 이를 이용해서 Subscriber들이 Observable가 아이템을 뱉기 전에 구독하고 기다리게 할 수 있다.

image

아래의 예시를 보면 이해가 잘 간다.

예시 #1. 일반 Observable


def firstMillion  = Observable.range( 1, 1000000 ).sample(7, java.util.concurrent.TimeUnit.MILLISECONDS);
 
 firstMillion.subscribe(
    { println("Subscriber #1:" + it); },       // onNext
    { println("Error: " + it.getMessage()); }, // onError
    { println("Sequence #1 complete"); }       // onCompleted
 );
 
 firstMillion.subscribe(
     { println("Subscriber #2:" + it); },       // onNext
     { println("Error: " + it.getMessage()); }, // onError
     { println("Sequence #2 complete"); }       // onCompleted
 );

Subscriber #1:211128

Subscriber #1:411633

Subscriber #1:629605

Subscriber #1:841903

Sequence #1 complete

Subscriber #2:244776

Subscriber #2:431416

Subscriber #2:621647

Subscriber #2:826996

Sequence #2 complete

예시 #2. Connectable Obervable


def firstMillion  = Observable.range( 1, 1000000 ).sample(7, java.util.concurrent.TimeUnit.MILLISECONDS).publish();

 firstMillion.subscribe(
    { println("Subscriber #1:" + it); },       // onNext
    { println("Error: " + it.getMessage()); }, // onError
    { println("Sequence #1 complete"); }       // onCompleted
 );
 
 firstMillion.subscribe(
    { println("Subscriber #2:" + it); },       // onNext
    { println("Error: " + it.getMessage()); }, // onError
    { println("Sequence #2 complete"); }       // onCompleted
 );
 
 firstMillion.connect();

Subscriber #2:208683

Subscriber #1:208683

Subscriber #2:432509

Subscriber #1:432509

Subscriber #2:644270

Subscriber #1:644270

Subscriber #2:887885

Subscriber #1:887885

Sequence #2 complete

Sequence #1 complete

'타닥타닥 > RxJava' 카테고리의 다른 글

006. RxJAVA 연산자 :: Observable 생성  (0) 2017.07.12
004. RxJava Subject란?  (0) 2017.07.05
003. Observable : Hot, Cold?  (0) 2017.07.05
002. RxAndroid 준비하기  (0) 2017.07.05
001. Reactive Programming/RxJava 란?  (0) 2017.07.05
Comments