Rx subject

Jehyeon Lee·2024년 5월 9일
0

Subject

  • Subject는 옵저버블처럼 값을 받을 수 있고 외부에서 값을 통제할 수 있는 특별한 형태의 스트림입니다.
  • 옵저버블은 이미 정해진 데이터를 내보내는 스트림이지만, Subject는 외부에서 데이터를 주입하고 구독도 가능한 특징을 가지고 있습니다.
  • 값 주입 및 통제: Subject는 외부에서 .onNext(값)과 같은 메서드를 사용하여 값을 주입할 수 있습니다. 이로써 Subject에게 새로운 데이터를 전달할 수 있습니다.
  • 옵저버블처럼 동작: Subject는 옵저버블처럼 동작하여 값을 구독할 수 있습니다. 따라서 Subject에 데이터가 흘러들어올 때마다 등록된 옵저버(Subscriber)들에게 해당 데이터가 전달됩니다.
  • 데이터의 내보내기를 통제: Subject를 생성할 때 어떤 데이터를 내보낼지 미리 정할 수 있습니다. 이는 Subject가 생성되면서 이미 스트림에 데이터가 정해져 있다는 점을 의미합니다.
  • 옵저버블은 데이터가 이미 정해진 스트림으로, create할 때 어떤 데이터를 내보낼지 미리 결정됩니다. 그러나 외부에서 옵저버블에 데이터를 주입하려면 추가적인 메커니즘이 필요합니다. 이 때 등장하는 것이 Subject입니다.
  • Subject는 외부에서 값을 주입할 수 있는 옵저버블의 확장이며, 생성 시점에는 어떤 데이터를 내보낼지 미리 정할 수 있습니다. 이로써 Subject는 옵저버블을 동적으로 제어하면서 데이터를 주고받을 수 있는 중간자 역할을 수행합니다.

PublishSubject

  • 서브젝트의 어떤것이 Subscribe하면 데이터를 그시점부터 내려보내줌
  • 다른애가 구독해도 그 구독 시점 이후에 데이터를 보내줌
  • 자체가 서브젝트의 누군가가 구독을 할 수 있음 내부에서 데이터가 생성되면 데이터를 내려준다.

BehaviorSubject

  • PublishSubject과 다르게 기본값을 가지고 시작한다 .
  • 누군가가 구독하면 기본값을 내려보내줌
  • 새로운놈이 중간에 구독하면 최근의 발생한 값을 내려보내줌

let menus: [Menu] = [
        Menu(title: "이제현", price: 10000, count: 1),
        Menu(title: "이제서", price: 2000, count: 3),
        Menu(title: "이제사", price: 30000, count: 2),
        Menu(title: "이제수", price: 40000, count: 4),
 ]

lazy var menuObservable = 
BehaviorSubject<[Menu]>(value: menus)

ReplaySubject

  • 처음 기능은 PublishedSubject와 기능이 비슷하나 누군가가 구독을 하면 구독시점 전의 데이터도 내려보내줍니다.

AsyncSubject

  • 누군가가 구독을해도 마지막 OnComplete가 되기전까지는 보내지 않고 OnComplete가 되면 그때 마지막 데이터를 보내줍니다.

profile
공부한거 느낌대로 써내려갑니당

0개의 댓글

관련 채용 정보