공통점으로는 Observable이나 Driver의 데이터를 구독하거나, UI를 바인딩하는데 사용된다는 점이 있다
하지만 각각의 목적과 동작 방식이 다르다
1. Subscribe
가장 기본적인 구독 메서드이며 onNext, onError, onCompleted를 가지고 있으며,
옵저버블의 이벤트 타입에 대한 직접 처리가 가능하다
주로 데이터 스트림에서 변화를 감지하고 이벤트를 수동으로 처리할 때 사용한다
내부 로직을 보면 onNext, onError, onCompleted에 대한 처리를 하고 있다
2. Bind
UI에 데이터를 바인딩할 때 사용되며 onNext만 가지고 있어, 에러를 방출하지 않는 옵저버블과 함께 사용된다
주로 onNext 이벤트만 처리하며 에러 핸들링 로직을 가지고 있지 않다 → 오로지 UI 업데이트에만 초점이 맞춰져 있다
내부 로직을 보면 onError에 대한 처리를 하고 있긴 한데,
에러가 발생할 가능성이 있는 경우에 대비하여 디버그 모드에서 앱이 중단되도록 설계되었다
즉, 에러를 방출하지 않는 옵저버블에만 사용해야 하며 에러를 개발 중 디버깅용으로만 처리한다
(유저 입장에서의 Error를 신경쓸 필요가 없다)
3. Drive
RxCocoa에서 제공하는 Driver 타입의 메서드로 UI 바인드에 특화되어 있다
에러를 방출하지 않고 메인 스레드에서 동작하며 항상 Replay1(마지막 방출 값, 최신값)을 보장한다
UI 업데이트에 적합하며 드라이버를 UI요소와 연결할 때 사용한다
Hot Observable로 변환된 상태에서 이벤트를 처리한다
내부 로직을 보면 MainScheduler에서 동작을 하는 모습을 볼 수 있다 → UI 작업이 항상 메인스레드에서 동작하므로 안전하다
또한 에러 방출이 없는 모습도 볼 수 있다
총 정리!
특징 | Subscribe | Bind | Drive |
에러 처리 | 가능 | 불가능 | 불가능 |
사용 가능한 타입 | 모든 Observable | 에러를 방출하지 않는 Observable | Driver |
스레드 | 별도 설정 필요 | 별도 설정 필요 | 항상 메인 스레드에서 동작 |
사용 용도 | 일반적인 이벤트 처리 및 로직 | UI 요소와의 데이터 바인딩 | UI 요소와 안전한 데이터 바인딩 |
bind와 drive는 각각 어느 상황에 써야할까?
UI 바인딩 (간단한 Observable 사용) | bind |
UI 바인딩 (Driver 사용, 메인 스레드 보장) | drive |
최신 값 기억 + 메인 스레드에서 동작 | drive |
일반 Observable 사용 (UI 외 작업) | bind |
'🍎 Swift > iOS 학습 노트' 카테고리의 다른 글
[Swift🍎] URLSession 뜯어보기 (0) | 2025.01.17 |
---|---|
[Swift🍎] tableView, collectionView 식별자 간단하게 관리하기! (1) | 2024.10.31 |
[Swift🍎] RxSwift로 UITableView에 bind 하기 (0) | 2024.10.31 |
[Swift🍎] RxGesture로 간편하게 View에 클릭이벤트 넣기 (0) | 2024.10.17 |
[Swift🍎] UIColor를 CGColor에 할당해야 하는 경우 (0) | 2024.10.16 |