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이라고 생각하면 된다.

Categorized in:

Technology,