일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 테스트의 장점
- git
- Python
- rxjava
- Di
- compose
- mock
- 디자인패턴
- UnitTest
- Observable
- 깃
- 자료구조
- Kotlin
- Android
- 안정성
- 제한함수
- dagger2
- 코틀린
- MVVM
- 파이썬
- 공격적 프로그래밍
- 단위테스트
- 코딩테스트
- Jetpack
- 컴포즈
- Room
- 유닛테스트
- 안드로이드 디자인패턴
- 안드로이드
- ViewModel
- Today
- Total
세상을 바꾸는 개발자
[RxJava] publish 연산자와 connect 연산자 본문
안녕하세요~ 헬창코딩입니다.
오늘은 publish 연산자와 connect 연산자에 대해서 알아보도록 하겠습니다~
ConnectableObservable은 Hot Observable을 구현할 수 있도록 도와주는 타입으로 아무 Observable 타입이나 publish 연산자를
이용하여 간단히 ConnectableObservable로 변환할 수 있습니다. (Hot Observable은 저번 시간 포스트를 참고해주세요)
ConnectableObservable은 구독을 요청해도 Observable은 데이터를 발행하지 않습니다.
connect() 연산자를 호출할 때 비로소 아이템을 발행하기 시작합니다.
ConnectableObservable<Long> src = Observable.interval(1, TimeUnit.SECONDS).publish();
src.connect();
src.subscribe(data -> Log.d("log_test", "#1::" + data));
Thread.sleep(3000);
src.subscribe(data -> Log.d("log_test", "#2::" + data));
Thread.sleep(3000);
결과
첫 번째 구독시에 3초 동안 0~2초 까지 발행하고, 3초 뒤에는 두 번째 구독자가 추가도 있는데, 두 번째 구동자는 0~2는 수신하지 못하고
3부터 수신하는 것을 확인할 수 있습니다.
autoConnect 연산자
autoConnect 연산자는 connect 연산자를 호출하지 않더라도, 구독 시에 즉각 아이템을 발행할 수 있도록 도와주는 연산자입니다.
autoConnect 연산자의 매개변수는 아이템을 발행하는 구독자 수로, 만약 autoConnect(2)라고 하면, 구독자가 2개 이상 붙어야 아이템을 발행하기 시작합니다.
Observable<Long> src =
Observable.interval(100, TimeUnit.MILLISECONDS)
.publish()
.autoConnect(2);
src.subscribe(data -> Log.d("log_test", "A#::" + data));
src.subscribe(data -> Log.d("log_test", "B#::" + data));
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
결과
여기서 만약 src.subscriber()를 한 번만 호출했다면 아이템을 발행하지 않아 콘솔에 아무것도 출력되지 않습니다.
autoConnect()의 매개 변수로 0 이하를 입력하면 구독자 수와 관계없이 곧바로 아이템 발행을 시작합니다.
만약 autoConnect 연산자의 매개 변수를 지정하지 않는다면 autoConnect(1)과 동일하게 동작하며,
구독하자마자 아이템 발행을 시작합니다.
'안드로이드 > RxJava' 카테고리의 다른 글
[RxJava] Cold Observable과 Hot Observable의 차이 (0) | 2021.08.26 |
---|---|
[RxJava] 다양한 Observable의 형태 ( Completable ) (0) | 2021.08.26 |
[RxJava] 다양한 Observable의 형태 ( Maybe ) (0) | 2021.08.24 |
[RxJava] 다양한 Observable의 형태 ( Single ) (0) | 2021.08.24 |
[RxJava] Observable로 변환하기(fromArray, fromIterable, fromFuture, fromPublisher, fromCallable) (0) | 2021.08.23 |