[RxSwift] Signal과 Driver를 알아보자 !
반응형 프로그래밍인 Reactive X를 한창 배우는 요즘, Driver는 쓰는 용도를 알았지만 Signal이라는 생소한 개념이 등장해서 공부해보려고 한다.
결론부터 말하자면, Signal은 PublishSubject와 비슷하고 Driver는 BehaviorSubject와 비슷하다고 할 수 있다. 그렇다면 두 특성에 대한 공통점과 차이점은 무엇이 있을까?
💡 Signal과 Driver는 RxSwift와 UIKit를 접목시킨 RxCocoa에서 사용할 수 있는 도구이다.
Signal과 Driver의 공통점
- Error가 발생하지 않는다.
- 메인스레드에서 작동한다.
-
Signal과 Driver를 사용하는 가장 큰 특징은 아무래도 위에서 명시한 이런 공통점때문이다. UI는 메인스레드에서 처리해줘야 하기 때문에 RxCocoa에 있는 이런 특성들을 사용하지 않는다면 로직 하나하나를 어떤 스레드로 바꿔줘야 하는 번거로움이 발생하기 때문이다.
-
Error가 발생하지 않는 것도 이런 맥락과 비슷하다. 에러가 발생하더라도 UI는 계속해서 반응해야하기 때문에 Stream이 죽지않고 계속 살아있어야 한다.
Signal과 Driver의 차이점
위에서 말했던 것과 같이 Signal은 PublishSubject와 비슷하고 Driver는 BehaviorSubject와 비슷하다고 했다. 알기쉽게 이미지로 보도록 하자.
Driver의 경우
아래 그림과 마찬가지로 Driver의 경우에는 subscribe를 해줄 때, 가장 최근의 데이터를 받아오게 된다.
또 drive라는 메서드로 들어오는 event를 처리할 수 있는 로직을 구현해줄 수 있다.
searchButtonTapped
.asDriver(onErrorJustReturn: "")
.drive(to: self.rx.endEditing)
Signal의 경우
Signal의 경우에는 subscribe를 하게 되면 Driver와 달리 가장 최근의 데이터는 넘어오지 않고, 구독을 해준 시점 이후에 발생하는 값을 받게 된다.
마찬가지로 subscribe말고 emit라는 메서드로 이벤트를 처리하게 된다.
searchButtonTapped
.asSignal()
.emit(to: self.rx.endEditing)
https://reactivex.io/documentation/subject.html
https://medium.com/@hongseongho/%EB%B2%88%EC%97%AD-signal-and-relay-in-rxcocoa-4-619d5194dcbd![](https://media.vlpt.us/images/wannabe_eung/post/99602d30-1621-4cef-8ca2-97ecb4b5b302/image.png)![](https://media.vlpt.us/images/wannabe_eung/post/36604098-218a-4f00-9619-4e1eff546eeb/image.png)
Author And Source
이 문제에 관하여([RxSwift] Signal과 Driver를 알아보자 !), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wannabe_eung/RxSwift-Signal과-Driver를-알아보자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)