본문 바로가기
🍎 Swift/iOS 학습 노트

[Swift🍎] RxSwift에서 bind와 driver의 차이

by 솔비님 2024. 10. 14.

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가 중단되지 않도록 해야 하는 경우 적합