Reactive Programming
entity 방출 요소에 의존, 변경 사항을 구독, 해당 변경 사항에 반응.
왜 RxSwift 이용하는가?
상태를 다시 확인하고 수동으로 코드에 조건을 입력하지 않아도 됨
if -else 나 switch 구문 등을 많이 줄일 수 있다.
비동기 실행 코드를 observable-subscriber method에 의해 깔끔하게 짤 수 있음
핵심 요소
1. Observable : 모든 데이터 유형이 될 수 있는 Entity
모든 다른 유형의 이벤트가 발생 시 Observer에게 요소를 방출
2. Observer: 관찰 가능 항목 구독, 변경사항 수신, 모든 변경사항에 대해 프로그래밍된 조치를 취한다.
3. Dispose Bag: 특정 파일의 메모리 할당이 해제될 때마다 이걸 통해서 dispose. -> 메모리 누수 발생을 막음
4. Subject: Observable이자 Observer. 4가지 기능이 있다 (Publish, Behavior, Replay, Async)
-Publish: 초기값 X. subscriber에게 새 요소를 방출.
-Behavior: 초기값 O
-Replay: 버퍼크기로 초기화.
-Async: Sequence의 마지막 다음 이벤트만 방출.
5. Relay: 종료되지 않는 시퀀스 (UI 에 많이 이용)
(2가지 타입: PublishRelay, BehaviorRelay. subject와 거의 유사한 특성을 가짐.)
-next 이벤트만 처리. next 이벤트를 accept 라는 키워드로 사용.
(onNext만 O. onCompleted,onError 방출하지 않음.
따라서, disposed가 되기 전까지 subscribe이 해제되지 않음. diposed가 호출되는 deinit 시점이나 직접 처리를 해주어야 함.)
*subject vs. relay 가장 큰 차이점? Relay의 경우, completed와 error 이벤트를 받지 못함.
*subject는 observable과, relay는 driver와 자주 사용이 됨.
6. Operators
-Filtering Operators ex) .elementAt(index), .skip(n) 필터링
-Transforming Operators ex) .toArray(), .map() 변형
-Combining Operators ex) .concat(), .zip 콤바이닝
-Time-based Operators ex) replay(), interval(schedulers) 시간 관련 연산자
7. Schedulers: 프로세스가 발생하는 컨텍스트.
-subscribeOn() : 쓰레드 전환
-observeOn() : 관찰이 발생하는 스케줄러를 변경
8. Traits & Driver
Trait: UI 처리에 특화된 Observable.
RxSwift 에서 제공해주는 observable, RxCocoa에서 제공해주는 observable이 있다.
-Traits에 해당하는 observable의 공통적인 특성은 main thread에서 실행된다는 점. 그리고 error이벤트 없음.
*RxSwift - Single, Completable, Maybe
*RxCocoa - Driver, Signal, ControlProperty/ControlEvent
8-1. Driver
-Main Thread에서의 실행을 보장해준다.
-Observable이 UI로 특화된 형태이기 때문에, subscribe만 할 수 있고 값을 변경할 수는 없다.
-bind와 달리 stream 공유가 된다. (bind는 subscribe의 별칭)
-driver는 내부적으로 share(replay:1, scope:.whileConnected)가 구현되어 있음
8-2. Share
-일반적으로는 subscribe 할 때마다 새로운 시퀀스가 생성이 된다.
-따라서, 여러 subscribe을 하게 될 경우, 불필요한 리소스가 발생할 수 있기 때문에, 내부적으로 모든 subscribe가 하나의 subscribe를 공유할 수 있도록 해야함.
-replay와 scope를 통해 버퍼사이즈와 유지 상태를 결정할 수 있음.
ex) share()가 구현되어 있지 않다면, 네트워크 요청이 여러 번 일어나게 됨. 따라서 불필요한 콜이나 리소스 낭비가 생기지 않도록 subscribe를 공유할 수 있게 처리함.
참고) 새싹 앱개발자 데뷔과정 78회차 pdf 자료
참고) https://medium.com/technology-nineleaps/basics-of-reactive-programming-in-swift-rxswift-8202883a02a7
'iOS > RxSwift' 카테고리의 다른 글
RxSwift Operator) CombineLatest (0) | 2023.02.15 |
---|---|
RxSwift 제일 간단한 테이블뷰 만들기 (0) | 2023.02.14 |
RxSwift) RxCocoa 로 TableView Delegate 처리 (0) | 2023.01.13 |
RxSwift 4시간만에 끝내기(곰튀김님 강의 듣고 정리) [시즌2] (0) | 2023.01.12 |
RxSwift 4시간만에 끝내기(곰튀김님 강의 듣고 정리) [시즌0] (0) | 2023.01.09 |