ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RxSwift) Subject
    RxSwift 2020. 11. 18. 20:57

    Observable은 Event를 전달 한다.

    Observer는 Observable을 subscribe 하고 전달 되는 event를 처리한다.

    또한 하나의 Observer는 하나의 observable만 구독이 가능 하다.

     

    Subject는 observable과 observer의 역할을 동시에 한다.

    즉, Observable은 subject에 event를 보낼수 있고 subject는 observable을 구독 할 수 있다.

    또 subject는 Observer에 event를 보낼 수 있고 observer는 subject를 구독 할 수 있다.

     

    Preview

     

    4가지 subject

    - PublishSubject

    - BehaviorSubject

    - ReplaySubject

    - AsyncSubject

     

    Relay

    subject를 랩핑하고 있는 두가지 Relay

    - publishRelay

    - BehaviorRelay

     

    PublishSubject

    subject로 전달 되는 event를 observer로 전달 하는 가장 기본적인 subject이다.

    publishSubject의 가장 큰 특징은 이벤트가 전달 되면 즉시 이벤트를 실행 한다.

    그래서 서브젝트가 최초로 생성되는 시점과 구독이 시작 되는 시점 사이의 이벤트는 사라진다.

    Behavior Subject

    subject로 전달된 이벤트를 observer로 전달 하는 것은 PublishSubject와 동일하다.

    subject를 생성시 Next event를 바로 전달한다.
    따라서 구독이 시작 될때 가지고 있던 event를 전달 하여 실행 한다.

    즉 가장 최근의 Next 이벤트를 저장하고 있다가 새로운 구독 시 바로 전달 해준다.

    ReplaySubject

    두 개 이상의 이벤트를 저장 해 두고 새로운 구독시 바로 전달 하고 싶다면 Replay Subject를 사용 한다.

    생성시 create 메소드를 통해 버퍼 개수를 지정한다. (버퍼가 이벤트를 저장할 메모리 수)

    이벤트의 종료 여부(complete, erorr)에 상관없이 항상 버퍼에 저장되어 있는 이벤트를 새로운 구독자에게 전달 한다.

    AsyncSubject

    이전 subject들과 이벤트를 전달 하는 시점의 차이

    subject로 compeleted 이벤트가 전달되기 전까지 어떤 이벤트도 전달 하지 않는다.

    completed 이벤트가 전달 되면 바로 직전에 전달 된 next 이벤트를 구독자로 전달한다.

    error 이벤트 시 next 이벤트는 전달되지 않고 error 이벤트만 전달 된 후 종료 됨.

     

    Relay

    relay는 subject를 감싸고 있는 것.

    오로지 Next 이벤트만 전달 가능하다.

    댓글

Designed by Tistory.