RxJS subject behaviorSubject

agnusdei·2023년 7월 26일
0

Subject와 BehaviorSubject는 모두 RxJS 라이브러리에서 데이터를 처리하고 전달하는 클래스입니다. 이 두 클래스는 각각 다른 방식으로 데이터를 다루기 때문에 구체적인 차이점 및 공통점을 알고 활용하는 것이 중요합니다.

공통점

먼저, 두 클래스의 공통점에 대해 살펴보겠습니다.

  1. Observer와 Observable 역할 동시 수행: Subject와 BehaviorSubject는 모두 Observer와 Observable 인터페이스를 구현한 클래스입니다. 이 클래스들은 데이터 스트림을 생성하고 이를 구독하기 위한 도구로 사용됩니다.

  2. 다중 구독 지원: Subject와 BehaviorSubject는 둘 다 여러 Observer를 구독할 수 있으며, 동시에 각각의 구독자에게 데이터를 전달할 수 있습니다.

차이점 및 특성

이제 Subject와 BehaviorSubject의 차이점과 각각의 특성에 대해 살펴보겠습니다.

Subject:

  1. 초기값 미제공: Subject는 초기값을 가지지 않습니다. 구독한 Observer들에게 데이터를 방출하기 전까지 존재하지 않습니다.

  2. 구독 시점 이전의 데이터 미전달: 새로 구독한 Observer에게는 구독 시점 이전에 방출된 데이터를 전달하지 않습니다. Observer가 구독한 이후의 값만 전달됩니다.

BehaviorSubject:

  1. 초기값 제공: BehaviorSubject는 생성될 때 초기값을 전달받아, 모든 구독자에게 초기값을 전달합니다.

  2. 구독 시점 이전의 데이터 전달: 새로 구독한 Observer에게도 가장 최근에 방출된 데이터 값을 전달합니다.

장단점

Subject의 장단점:

  • 장점: 특정 구독자에게만 현재 시점의 데이터를 전달할 때 사용할 수 있어 일부 상황에서 유용합니다.
  • 단점: 초기값이 없기 때문에 구독자가 구독한 시점 이전에 발생한 이벤트나 데이터에 대해 알 수 없습니다.

BehaviorSubject의 장단점:

  • 장점: 초기값이 제공되며 상태 관리나 데이터 캐싱 등의 용도로 사용하기 적합합니다. 새로 구독한 구독자에게도 상태를 전달할 수 있어 동기화가 필요한 경우 유용합니다.
  • 단점: 초기값을 설정해야 하며, 모든 구독자에게 초기값 또는 가장 최근의 값을 전달하기 때문에 상황에 따라 부적절한 정보를 전달할 수 있습니다.

결론적으로 Subject와 BehaviorSubject의 차이점을 이해하고, 그에 따른 장단점을 고려해 상황에 맞게 선택하여 사용하면 좋습니다. 초기값이나 구독 시점의 상태 관리가 중요한 경우 BehaviorSubject를 사용하고, 특정 구독자에게만 실시간의 데이터를 전달하고 싶다면 Subject를 사용할 수 있습니다. 어떤 클래스를 선택하더라도 적절한 상황에서 활용하면 프로젝트의 진행에 도움이 됩니다.

Subject와 BehaviorSubject

Subject 예시

Subject는 이벤트 버스나 여러 컴포넌트간 메시지 전달에 사용됩니다.

import { Subject } from 'rxjs';

const subject = new Subject();
subject.subscribe(value => console.log(`Subject Observer: ${value}`));
subject.next('Hello');
subject.next('World');

BehaviorSubject 예시

BehaviorSubject는 상태 관리와 초기값 전달에 더 적합합니다.

import { BehaviorSubject } from 'rxjs';

const behaviorSubject = new BehaviorSubject('Initial Value');
behaviorSubject.subscribe(value => console.log(`BehaviorSubject Observer: ${value}`));
behaviorSubject.next('Hello');
behaviorSubject.next('World');

각 사용 사례에 맞게 Subject와 BehaviorSubject를 선택하여 사용할 수 있습니다.

0개의 댓글