Subject는 특수한 종류의 Observable이다.
뭐가 특별한가? 값을 여러 Observer에게 멀티캐스팅해줄 수 있는 류의 옵저버블이다.
쉽게 말해서 여러 값의 옵저버를 달 수 있다는 거다.
subject : darrengwon.tistory.com/1369?category=905593
multicast (deprecated) => connectable, connect, share
과거에서는 이렇게 사용했는데, deprecated 되었다.
const interval$ = interval(2000).pipe(tap((i) => console.log(`interval ${i}`)));
const multicatedInterval$ = interval$.pipe(multicast(() => new Subject()));
// connect하기
const connectedSub = multicatedInterval$.connect();
// subscribe 2개 이상 할 수 있음. 이제 subject임
const subOne = multicatedInterval$.subscribe(obs);
const subTwo = multicatedInterval$.subscribe(obs);
setTimeout(() => {
// 이 구독을 꺼봤자 connect 구독이 살아 있음. connect 구독을 꺼야함.
// subOne.unsubscribe();
// subTwo.unsubscribe();
connectedSub.unsubscribe();
}, 3000);
In version 7, the multicasting APIs were simplified to just a few functions:
그리고선 리팩토링하는 사례들을 나열해주는데, 여기는 그냥 직접 문서를 보는게 빠릅니다. rxjs.dev/deprecations/multicasting
Share
Generate new multicast Observable from the source Observable value
multicate가 deprecated된 후에는 refCount 대신 share를 쓰라고 되어 있습니다.
Where multicast is used in conjunction with refCount, it can be replaced with share.
const source = interval(1000).pipe(share());
source.subscribe((x) => console.log("subscription 1: ", x));
source.subscribe((x) => console.log("subscription 2: ", x));
... 어... 솔직히 이 섹션에 해당하는 오퍼레이터를 많이 사용해보지 않아서, 앞으로 사용하게 되면 추가적으로 정리해보겠다.