RxSwift를 21일간 공부하는 루틴
"Rx를 기깔나게 쓰는 신입개발자 도전" 시작 🚀
ReactiveX 공식문서를 보면 Subject
가 있다.
많은 사람들은 Subject를 한문장으로 Observable 이면서 Observer 라고 한다.
그래서 지난블로그에서 정리한 Observable과 Observer를 떠올려보았다. Observable은 이벤트를 방출했었고, Observer는 Observable를 구독하여 이벤트를 처리하였다.
즉 Subject는 Observer라서 Observable을 구독할 수 있고, Observable 이기때문에 이벤트도 방출할 수 있다.
👉 이유를 적기에 앞서 결론부터 적자면, 외부에서 받은 데이터 값을 처리해줄 때 Subject를 사용하면 유용할것 같다.
이제 이유를 적어보겠다.
subject에는PublishSubject
, BehaviorSubject
, RelaySubject
, AsyncSubject
가 있다. 각각의 특징에 따라 Observable 대신 Subject를 쓰는가에 대한 의문에 답을 할 수 있을 것이다. (이부분은 이후에 기록을 할 예정이다)
그전에, 내가 느낀 Observable과 Subject의 가장 큰 느낀점을 코드와 함께 적어보겠다.
//MARK: Observable
Observable.just("immioriii@gmail.com")
.subscribe { print(checkEmail(email: $0))}
.disposed(by: disposeBag)
print("---")
//MARK: BehaviorSubject
let bs = BehaviorSubject<String>(value: "")
bs.subscribe { print(checkEmail(email: $0))}
.disposed(by: disposeBag)
bs.onNext("ii")
bs.onNext("iii")
bs.onNext("iii@")
bs.onNext("iii@g")
위의 코드는 이메일 입력시 "@" 가 포함이 되었는지에 따라 bool값을 반환한다.
코드의 아웃풋을 보면, 다음과 같다.
true --- false false false true true
Observable.just
의 경우 내부에서 한번에 string값을 확인하므로 true를 반환한다.BehaviorSubject
의 경우, 외부에서 값을 전달하면서 종료되기 전까지 이벤트를 처리하여, "@"가 포함이 되었을때 true를 반환한다.우선 내가 구현하고 싶은 기능은, 이메일의 알파벳 하나하나를 입력할때 마다, 검사를 하여 '@'이 포함되었을때 true값을 내보내는 기능이다.
Observable.just
와 let bs = BehaviorSubject<String>(value: "")
의 가장 큰 차이점은 데이터를 발생 시키는 부분이라고 생각한다. Observable의 경우는 한번에 생성연산자(just) 내부에서 만들어진다.
반면에 subject를 사용하면, 입력을 할때 마다 텍스트필드에서 받아온 값을 처리해 줄 수 있다.
코드를 보면서 설명해보겠다.
아래 코드 조각은 비어있는 텍스트필드에 내 이메일인 immioriii@gmail.com 를 입력면서 생긴 이벤트를 표현한 것이다.
//초기값 비어있으므로 false
bs.onNext("ii") //false
bs.onNext("iii") //fasle
bs.onNext("iii@") //true
bs.onNext("iii@g") //true
알파벳 하나씩 입력할때마다 입력된 데이터를 검사할 수있다.
이처럼 텍스트필드는 처음에 비어있기 때문에 우선 false가 반환되고, "@"이 포함이 되었을때 true 를 반환해준다.
따라서 내가 구현하고 싶은 기능엔 BehaviorSubject 가 적합하다.
지금까지 글을 적으면서, PublishSubject
도 사용해보고 BehaviorSubject
도 사용해 보았다.
스포일러 느낌으로 요약해보겠다.
PublishSubject
는 구독 이후에 발생하는 이벤트를 전달 (구독 전 이벤트는 확인 불가)BehaviorSubject
는 구독 시 가장 마지막(최신)이벤트를 바로 전달 BehaviorSubject
는 초기값이 있음다음글에는 각각의 Subject 의 종류에 대해 자세히 살펴보고, 언제쓰면 좋을지에 대해 고민의 흔적을 남겨보겠다.