🌍 Unity 연구/UniRX
UniRX 배우기 4) Hot, Cold Observable
맨텀
2021. 4. 29. 21:22
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()}"));