[RxSwift] BehaviorSubject
2025. 1. 10. 23:29ㆍiOS
반응형
BehaviorSubject는 RxSwift에서 제공하는 Subject 중 하나로, 현재 상태를 나타내거나 초기 값을 지정할 때 유용합니다. 구독자가 구독을 시작하면, 항상 가장 최근의 값을 즉시 받을 수 있다는 특징이 있습니다.
주요 특징
- 초기값: BehaviorSubject는 반드시 초기 값을 가져야 합니다.
- 최근 값 유지: 항상 가장 최근 값을 보유하며, 새로운 구독자는 해당 값을 즉시 전달받습니다.
- 구독 중 전달: 새로운 값이 emit될 때마다 모든 구독자에게 전달됩니다.
사용 예제
초기화 및 기본 동작
import RxSwift
// 초기값이 "Hello"인 BehaviorSubject 생성
let subject = BehaviorSubject(value: "Hello")
// 첫 번째 구독자
subject.subscribe(onNext: { value in
print("Subscriber 1 received: \(value)")
})
.disposed(by: DisposeBag())
// 새로운 값 전달
subject.onNext("World")
// 두 번째 구독자
subject.subscribe(onNext: { value in
print("Subscriber 2 received: \(value)")
})
.disposed(by: DisposeBag())
// 또 다른 값 전달
subject.onNext("RxSwift")
출력 결과:
Subscriber 1 received: Hello
Subscriber 1 received: World
Subscriber 2 received: World
Subscriber 1 received: RxSwift
Subscriber 2 received: RxSwift
주요 메서드
- onNext(_:): 새 값을 발행합니다.
- onError(_:): 에러를 발행하고 모든 구독을 종료합니다.
- onCompleted(): 완료 이벤트를 발행하고 모든 구독을 종료합니다.
- value: 현재 값을 동기적으로 가져올 수 있습니다.
주의 사항
- value 프로퍼티는 try!를 동반할 수 있는 API이므로, 주의해서 사용해야 합니다. 값이 없거나 에러 상태일 경우 호출 시 크래시가 발생할 수 있습니다.
do {
let currentValue = try subject.value()
print("Current value is \(currentValue)")
}
catch {
print("Error: \(error)")
}
적합한 사용 사례
- 상태 관리: UI 상태나 데이터의 현재 상태를 유지하고 공유하는 데 유용합니다.
- 초기 값이 필요한 경우: ReplaySubject와 달리, 항상 초기 값을 요구하므로 초기 상태가 명확합니다.
- 구독 시 최신 데이터가 필요한 경우: 예를 들어, 설정 화면에서 사용자의 현재 설정 값을 표시해야 하는 경우에 유용합니다.
반응형
'iOS' 카테고리의 다른 글
[iOS] 카메라(Camera)/앨범(Album) 권한 (0) | 2025.01.13 |
---|---|
[RxSwift] PublishSubject (0) | 2025.01.10 |
[iOS] Keychain과 UserDefaults 병행 (1) | 2025.01.10 |
[API] 400 Bad Request (1) | 2025.01.10 |
[iOS] Method cannot be marked @objc because the type of the parameter 5 cannot be represented in Objective-C (0) | 2025.01.10 |