iOS 개발일지
1025 새싹 77회차 정리 - RxSwift Sbuject 본문
iOS 앱 개발자 데뷔 과정 77회차
#1. Checklist
- Operator
- repeatElement & take
- interval
- debounce
타이머를 설정한 후, 타이머가 끝난 시점에 가장 최근의 값을 방출한다.
이벤트가 방출될 때마다 타이머가 초기화된다.
- distinctUntilChanged
연달아 중복된 값을 전달받을 경우 무시한다.
- withUnretained
약한 참조를 갖기 위한 [weak self] 대신 사용할 수 있으며, subscribe 클로저의 첫 번째 파라미터로 받아온다.
- Subject
- Observable vs Subject
Observable은 이벤트를 생성하고 전달하기만 할 뿐, 새로운 값을 Observable에 추가할 수 없다.
사용자의 입력 등에 따라 실시간으로 데이터의 변화를 감지하여 표현하고, 변경된 데이터를 subscribe를 통해 emit 할 수 있는 객체가 필요하다.
Subject는 Observable과 Observer를 동시에 담당하고 있기 때문에, 이벤트의 전달과 처리가 모두 가능하다.
또한 Observable을 여러번 subscribe 할 경우 독립적인 실행을 갖지만, Subject의 경우 여러번 Subscribe 하더라도 Observable의 실행이 내부적으로 공유되기 때문에 일정한 값을 받을 수 있다.
참고로, Variable은 예전 버전에서 사용했던 Subject이기 때문에 공부하지 않아도 된다.
- PublishSubject
초기값이 없는 빈 상태로 시작하며, subscribe 이후 시점부터 emit 되는 이벤트를 처리할 수 있는 특성을 가지고 있다.
subscribe 이전에 emit 된 이벤트들은 무시된다.
- BehaviorSubject
BehaviorSubject를 생성할 때에는, PublishSubject와 다르게 초기값이 필수이다.
subscribe 이전에 emit한 이벤트가 있다면, 가장 최근에 전달된 이벤트 하나를 전달받을 수 있다.
subscribe 이전에 emit 한 이벤트가 없을 경우에는 초기값을 전달한다.
뷰를 미리 채워두는 용도로 사용하기 용이하다.
- ReplaySubject
bufferSize에 작성 된 이벤트 만큼, 메모리에 이벤트를 가지고 있다가 subscribe를 한 직후에 한번에 이벤트를 전달한다.
오류가 발생하더라도 메모리에 보유하고 있는 이벤트를 emit 하고 error 를 notification 한다.
많은 양을 버퍼로 가지고 있을 때는 메모리 부하가 발생할 수 있다.
- AsyncSubject
PublishSubject, BehaviorSubject, ReplaySubject는 subscribe 한 이후 이벤트가 전달되면 즉시 이벤트를 전달한다.
하지만 AsnycSubject는 subscribe를 했더라도, completed 이벤트가 전달되기 전까지 어떤 이벤트도 전달하지 않는다.
그리고 completed 이벤트가 전달되면, 가장 최근 시점에 전달된 next 이벤트 하나를 함께 전달한다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
1027 새싹 79회차 정리 - RxSwift Share (0) | 2022.10.27 |
---|---|
1026 새싹 78회차 정리 - RxSwift Relay (0) | 2022.10.26 |
1024 새싹 76회차 정리 - RxCocoa 맛보기 (0) | 2022.10.25 |
1020 새싹 74회차 정리 - MVVM API 통신 (0) | 2022.10.20 |
1019 새싹 73회차 정리 - DiffableDataSource (0) | 2022.10.20 |