BehaviorSubject

hzw94·2021년 5월 5일
0

RxSwift

목록 보기
4/10

RxSwift BehaviorSubject

BehaviorSubject는 앞서 배웠던 PublishSubject와 유사하게 동작하는 특징이 있다.
그렇다면 먼저, 어떠한 것이 유사하고 다른지에 대해 알아보자.

우선 BehaviorSubject역시 Subject로 전달된 Event를 구독자에게 전달하는 것은 동일하다.

하지만, Subject를 생성하는 방식에 차기아 있다.
코드로 한번 보자.

let p = PublishSubject<Int>()


let b = BehaviorSubject<Int>(value: 0)

언뜻 보기에는 그냥 이름 차이 아닌가? 생각이 들수도 있지만
PublishSubject 는 비어있는 Subject로 생성이 가능하지만, Behavior은 하나의 값을 전달해야 한다.

또 하나의 차이는 구독할때 나타난다.
이것도 코드로 한번 보자.

p.subscribe {
    print("Published >> ", $0)
}.disposed(by: disposeBag)


b.subscribe{
    print("BehaviorSubject >>",$0)
}.disposed(by: disposeBag)

Publish Subject는 내부 이벤트가 저장되지 않은 상태로 생성이 되서,
이벤트를 생성하기 전까지 구독자에게 전달하는 이벤트가 존재하지 않는다.

하지만 BehaviorSubject는 Subject를 생성하면 내부에 next이벤트가 생성이 된다.
생성자로 생성한 값이 저장이 되고난 뒤에 BehaivorSubject 생성하고 구독시에 바로 이벤트를 전달한다.

새로운 구독자가 나타나면 어떻게될까?

답은 의외로 간단하다.
생성 시점에 만들어진 Next Event를 가지고 있다가 새로운 구독자가 생성되면 다시 전달한다.
Subject로 새로운 Next Event가 지정되면 기존에 가지고 있던것을 교체하고 가장 최신 Next Event를 Observer에 전달해준다.

profile
볼가놈의 iOS & Swift & RxSwift & PS 저장창고

0개의 댓글