혼자 있고 싶네요. 모두 나가주세요.
005. Connectable Observable 본문
참조 : [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가 아이템을 뱉기 전에 구독하고 기다리게 할 수 있다.
아래의 예시를 보면 이해가 잘 간다.
예시 #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