Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jvm이란
- 스택 자바 코드
- 안드로이드 레트로핏 사용법
- rxjava hot observable
- jvm 작동 원리
- rxjava disposable
- 안드로이드 라이선스 종류
- 안드로이드 유닛 테스트
- ar vr 차이
- ANR이란
- android ar 개발
- 서비스 쓰레드 차이
- 객체
- 안드로이드 레트로핏 crud
- android retrofit login
- 안드로이드 유닛테스트란
- 2022 플러터 안드로이드 스튜디오
- 2022 플러터 설치
- 큐 자바 코드
- 클래스
- 플러터 설치 2022
- 멤버변수
- rxjava cold observable
- 스택 큐 차이
- 안드로이드 유닛 테스트 예시
- 안드로이드 라이선스
- Rxjava Observable
- 안드로이드 os 구조
- 자바 다형성
- 서비스 vs 쓰레드
Archives
- Today
- Total
나만을 위한 블로그
[Rxjava] Observable이란? - 2 - 본문
728x90
반응형
이전 포스팅에서 Observable에 대해 살펴봤으니 이 포스팅에선 관련된 예제를 확인한다
먼저 Cold Observable의 예제다.
import io.reactivex.rxjava3.core.Observable;
import java.util.concurrent.TimeUnit;
public class Main
{
public static void main(String[] args)
{
coldObservableText();
}
public static void coldObservableText()
{
Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
observable.subscribe(item -> System.out.println("Observer 1 : " + item));
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
observable.subscribe(item -> System.out.println("Observer 2 : " + item));
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
위 코드를 실행하면 아래와 같은 결과가 나온다.
observable.interval()과 그 안의 인자들 때문에 1초마다 숫자들이 하나씩 출력되는 것 같다.
잘 보면 Observer 1은 0부터 7까지 출력되지만 Observer 2는 0부터 4까지만 출력된다.
당연한 이야기지만 Observer 1은 처음부터 출력하기 시작한 반면 Observer 2는 1보다 3초 뒤에 subscribe()로 구독을 시작했기 때문에 이런 차이가 나오는 것이다.
다음은 Hot Observable의 예제다.
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.observables.ConnectableObservable;
import java.util.concurrent.TimeUnit;
public class HotObservableMain
{
public static void main(String[] args) throws InterruptedException
{
hotObservableTest();
}
private static void hotObservableTest() throws InterruptedException
{
Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
ConnectableObservable<Long> connectableObservable = observable.publish();
connectableObservable.subscribe(item -> System.out.println("Observer 1 : " + item));
connectableObservable.connect();
Thread.sleep(3000);
connectableObservable.subscribe(item -> System.out.println("Observer 2 : " + item));
Thread.sleep(5000);
}
}
위 코드를 실행하면 아래와 같이 작동한다.
Cold Observable과는 달리 Observer 1이 먼저 발행을 시작하다가 3초가 지나면 Observer 2가 아이템 발행을 시작하는 걸 볼 수 있다.
Cold Observable과의 차이라면 역시 Hot Observable의 경우 나중에 구독한 옵저버는 구독한 그 순간부터의 데이터만 다룰 수 있다는 것이다. 위의 Cold Observable은 늦게 구독한 옵저버도 처음부터 끝까지 모든 데이터를 다루는 것을 볼 수 있다.
반응형
'개인 공부 > Rxjava' 카테고리의 다른 글
[Rxjava] Observable vs Flowable (0) | 2021.06.21 |
---|---|
[Rxjava] 연산자의 종류와 생성 연산자(create, interval, just) (0) | 2021.05.26 |
[Rxjava] Observable이란? - 1 - (0) | 2021.05.26 |
[Rxjava] 인텔리제이에서 Rxjava 사용하기 (0) | 2021.05.25 |
[Rxjava] Subject, BehaviorSubject란? (0) | 2021.05.08 |
Comments