Observable의 두가지 타입 : Hot vs Cold
Hot Observable
- Observable이 생성되자마자 메시지를 발행하기 시작한다.
- 구독하는 Observer들은 중간부터 구독을 하게된다.
- 스트림을 분기 시키거나, 메시지를 분배하는 것이 가능하다.
Cold Observable
- Observable을 구독하기 전까지 메시지를 발행하지 않는다.
- Observer가 없어지면 동작하지 않는다.
- Subscribe 될 때마다 새롭게 생성되며, 별도의 스트림이 된다.
- 대부분의 스트림은 Cold이다.
Cold Observable의 예시
- 각기 다른 시점에서 3회 Subscribe를 하면, 각자 타이밍이 다르다. (별도의 스트림이 생성된다)
var stream = Observable.Interval(TimeSpan.FromSecond(1));
stream.Subscribe(x => Debug.Log($"첫번째 구독 : {Time.time.ToString()}"));
yield return new WaitForSecond(0.1f);
stream.Subscribe(x => Debug.Log($"두번째 구독 : {Time.time.ToString()}"));
yield return new WaitForSecond(0.1f);
stream.Subscribe(x => Debug.Log($"세번째 구독 : {Time.time.ToString()}"));
Hot으로 변환
- Publish()를 붙여서 Hot으로 변경이 가능하다.
- 3개의 구독의 OnNext 타이밍이 동일해진다.
var stream = Observable.Interval(TimeSpan.FromSecond(1)).Publish().RefCount();
stream.Subscribe(x => Debug.Log($"첫번째 구독 : {Time.time.ToString()}"));
yield return new WaitForSecond(0.1f);
stream.Subscribe(x => Debug.Log($"두번째 구독 : {Time.time.ToString()}"));
yield return new WaitForSecond(0.1f);
stream.Subscribe(x => Debug.Log($"세번째 구독 : {Time.time.ToString()}"));
'🌍 Unity 연구 > UniRX' 카테고리의 다른 글
UniRX 배우기 6) UniRX 오퍼레이터 (0) | 2021.04.30 |
---|---|
UniRX 배우기 5) 코루틴과 함께 사용하기 (0) | 2021.04.29 |
UniRX 배우기 3) 스트림의 구독과 종료시점 (0) | 2021.04.26 |
UniRX 배우기 2) Observable 객체 생성하기 (0) | 2021.04.25 |
UniRX 배우기 1) 스트림과 메시지 (0) | 2021.04.23 |