Tunko Development Diary

RxSwift) BehaviorSubject 란? 본문

Development/RxSwift

RxSwift) BehaviorSubject 란?

Tunko 2022. 5. 30. 14:44

BehaviorSubject는 기능상으로 PublishSubject와 큰 차이가 없습니다. 하지만 생성 및 구독을 할때 차이가 있습니다.

바로 예제 코드와 로그를 통해 알아보겠습니다.

let disposeBag = DisposeBag()

enum MyError: Error {
   case error
}

let publishSubject = PublishSubject<Int>()
publishSubject.subscribe {print("publishSubject : \\($0)")}
publishSubject.disposed(by: disposeBag)

let behaviorSubject = BehaviorSubject<Int>(value: 1)
behaviorSubject.subscribe {print("behaviorSubject : \\($0)")}
behaviorSubject.disposed(by: disposeBag)

출력

behaviorSubject : next(1)

이대로 실행하면 저렇게 출력됩니다.

여기서 publishSubject와 차이점이 두드러집니다. behaviorSubject는 생성을 할때 value에 1을 전달합니다. 그렇기 때문에 구독과 동시에 가지고있던 인자를 이벤트로 전달합니다.

이 상태에서 onNext로 이벤트를 전달합니다.

let behaviorSubject = BehaviorSubject<Int>(value: 1)
behaviorSubject.subscribe {print("behaviorSubject : \\($0)")}
behaviorSubject.disposed(by: disposeBag)
behaviorSubject.onNext(2)

출력

behaviorSubject : next(1)
behaviorSubject : next(2)

그렇다면 새로운 해당 Subject를 새로 구독을 하면 어떻게 되는지 확인해 봅니다.

let behaviorSubject = BehaviorSubject<Int>(value: 1)
behaviorSubject.subscribe {print("behaviorSubject : \\($0)")}
behaviorSubject.disposed(by: disposeBag)
behaviorSubject.onNext(2)
// 새로운 구독
behaviorSubject.subscribe {print("behaviorSubject 2 : \\($0)")}

출력

behaviorSubject : next(1)
behaviorSubject : next(2)
behaviorSubject 2 : next(2)

결과를 보면 알 수 있듯이 기존 구독중인 최종 이벤트 인자가 초기값으로 방출된것을 확인 할 수 있습니다.

반응형

'Development > RxSwift' 카테고리의 다른 글

RxSwift) AsyncSubject 란?  (0) 2022.05.30
RxSwift) ReplaySubject 란?  (0) 2022.05.30
RxSwift) PublishSubject 란?  (0) 2022.05.30
Subject 란?  (0) 2022.05.30
RxSwift) Operators 란?  (0) 2022.05.30
Comments