1. Subject
RxJS의 Subject는 내가 원할 때 발행할 수 있는 Observable이다.
Angular에서 Observable을 구독해제할 때 항상 쓰인다.
다음은 예제 코드이다.
private _destroy$: Subject<void> = new Subject<void>();
ngOnInit() {
this._initSubscriptions();
}
ngOnDestroy() {
this._destroy$.next();
this._destroy$.complete();
}
private _initSubscriptions() {
testObservable.pipe(
takeUntil(this._destroy$),
)
.subscribe(() => {
/** 어떠한 로직 **/
});
}
_initSubscriptions()
메서드 안에 보면, testObservable
을 구독하는 코드가 있다. Observable을 구독하면, 꼭 해제를 해야 메모리가 반납된다.
프런트엔드에서 Component안에 testObservable
을 구독하고 있다면, 이 컴포넌트가 사라질 때 testObservable
구독을 해제해줘야한다. 이 때, 위의 코드와 같이 ngOnDestroy
라이프 사이클안에 _destroy$
을 발행해준다.
그러면, takeUntil
함수가 발동하여 testObservable
구독을 멈춘다.
대부분의 문제는 Subject
를 사용하여 해결할 수 있다.
2. BehaviorSubject
정말 가끔은 Subject으로 해결되지 않을 때가 있다.
나는 1년 동안 딱 한 번 BehaviorSubject를 활용해본 적이 있다.
BehaviorSubject를 사용하는 이유는 내가 굳이 발행하지 않아도 구독하자마다 값을 받고 싶을 때 사용한다. 쉽게 말해서 초기값이 있는 Subject이라고 생각하면 된다.