1. Bind
- Observable을 UI요소에 바인딩 할 때 사용하며 데이터 스트림을 직접적으로 UI와 연결할 수 있다
- 주요 특징
1. 간단한 코드로 UI 업데이트를 할 수 있다
→ OnNext만 가지고있기 때문에 단순히 생성되는 값을 넘기고 싶을 때 유리하다
2. 스레드 처리: 일반적으로 메인 스레드에서 동작하지 않으며 직접적으로 스레드를 지정해 주어야 할 수 있다
3. 에러 처리: 에러 처리를 포함하지 않는다
→ onNext만 가지고 있어서 error&completed 가 발생하지 않는 무한한 이벤트를 방출할 수 있다
→ 옵저버블이 eroor를 방출하면 해당 옵저버블은 종료되며, 따로 에러를 처리하거나 UI에 반영할 수 없다
4. 메모리 관리: bind는 Disposable을 반환하며, 메모리 누수를 방지하기 위해 명시적으로 disposed(by:)로 해제해야 한다
observable
.bind(to: label.rx.text)
.disposed(by: disposeBag)
2. Driver
- UI의 안전한 바인드 처리를 위해 RxSwift에서 제공하는 특수한 옵저버블
- 주요 특징
1. 에러 처리: 에러가 발생하지 않으며, 에러가 발생할 경우 미리 설정해둔 기본 값을 방출하도록 설정할 수 있다
2. 스레드 처리: 항상 메인 스레드에서 동작해서 별도 스케줄러를 설정할 필요가 없다
3. 공유 상태: Driver는 Hot Observable이므로 여러 구독자가 있어도 하나의 데이터스트림을 공유한다 = 여러 UI 요소에 동시에 바인딩 할 수 있다
observable
.asDriver(onErrorJustReturn: "Default Value")
.drive(label.rx.text)
.disposed(by: disposeBag)
3. bind와 Driver의 차이점 요약
- bind는 간단한 UI 바인딩이나 반드시 메인 스레드에서 동작할 필요가 없고, 에러 처리가 중요하지 않은 경우에 유용
(ex. 테스트 코드나 단순한 데이터 스트림 처리) - Driver는 UI 업데이트에 최적화된 방식이기 때문에, UI 관련 작업에서는 Driver를 사용하는 것이 더 안전하고 권장됨 특히 메인 스레드에서 동작해야 하며, 에러가 발생해도 UI가 중단되지 않도록 해야 하는 경우 적합
'🍎 Swift > iOS 학습 노트' 카테고리의 다른 글
[Swift🍎] RxGesture로 간편하게 View에 클릭이벤트 넣기 (0) | 2024.10.17 |
---|---|
[Swift🍎] UIColor를 CGColor에 할당해야 하는 경우 (0) | 2024.10.16 |
[Swift🍎] UISearchController 키보드 숨김처리 (0) | 2024.09.26 |
[Swift🍎] pushViewController, setViewControllers (0) | 2024.09.25 |
[Swift🍎] CollectionView 뜯어보기 (0) | 2024.09.05 |