UniRX 배우기 4) Hot, Cold Observable

 

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()}"));

 

 

 

 

 

 

댓글

Designed by JB FACTORY