버그 잡이

RxSwift - bind() 말고 drive()를 써보는건 어때요? 본문

RxSwift

RxSwift - bind() 말고 drive()를 써보는건 어때요?

버그잡이 2020. 11. 29. 14:40

 

bind() 와 driver() 모두 UI 관련된 Observable 구독을 하기 위한 operator입니다.

 

둘 다  error 이벤트를 받지 않는다 는 특성이 있어 UI 바인딩에 적합 합니다.

 

 

bind(to: ) 의 단점

 

result 라는 Observable이 있고

이를 bind()로 구독하는 세 개의 Observer가 있다고 가정해봅시다.

 

observer1

observer2

observer3

...

 

각각의 Observer가 추가될때마다 새로운 스트림이 실행됩니다.

 

즉, Observable을 구독하는 옵저버가 늘때마다 스트림도 같이 느는 것입니다.

 

하나의 스트림을 공유해서 같이 쓴다면 참 좋을텐데 불필요하게 낭비되는 리소스가 생기는 것 입니다.

 

 

 

driver의 장점

 

driver는 스트림 공유를 가능하게 해줍니다.

즉, driver 객체를 구독하는 옵저버가 늘때마다 스트림도 같이 느는 것이 아니라

스트림은 하나로 유지되고 이를 같이 구독(공유)해서 각자의 작업을 하는 것입니다.

 

그리고 .asDriver() 객체는 driver로 스트림을 받는데
driver 는 기본적으로 Main-Thread로 스케쥴러가 지정되어 있기 때문에 UI layer에서 활용하기 좋습니다.

 

 

 

 

정리

 

1. driver는 스트림을 공유할 수 있어 불필요한 리소스 낭비를 예방할 수 있다.

 

2. driver는 main-thread에서의 실행을 보장해준다.

반응형
Comments