refCount() 는 autoConnect(1) 와 유사하다.

그럼 autoConnect와 refCount와 차이점은 무엇일까?

차이점은 더이상 배출할 Observer가 없을시 refCount는 자동으로 자신을 해지를 하고 다시 새로운 Observer 이 오면 처음부터 자동으로 시작을 한다.

autoConnect는 동작이 끝나면 dispose 가 되지만 다시 새로운게 오면 시작을 하진 않는다.

Observable<Long> threeRandoms = Observable.interval(1,TimeUnit.SECONDS)
    .publish()
    .refCount();

//Observable 1 배출
threeRandoms.take(5).subscribe( i->System.out.println("Observer 1 : " + i));

sleep(3000); // 3초동안 잠자기

//Observable 2 배출
threeRandoms.take(2).subscribe( i -> System.out.println("Observer 2: " + i));

sleep(3000); // 3초동안 잠자기

//Observable 3 배출
threeRandoms.subscribe( i-> System.out.println("Observer 3: " + i));

sleep(3000); // 3초동안 잠자기
....................
Observable 1 : 0
Observable 1 : 1
Observable 1 : 2
Observable 1 : 3
Observable 2: 3
Observable 1 : 4
Observable 2: 4 <-- 배출이 완료가 되고 dispose가 됐다. 
Observable 3: 0 <-- 새로운 Observer 왔기 때문에 시작된다. 
Observable 3: 1

그리고 publish().refCount() 을 줄여서 share() 라고 사용가능하다.

Observable.interval(1,TimeUnit.SECONDS).share(); // publish().refCount() 와 같은 의미


+ Recent posts