바꿔조 프로젝트를 마무리하고, 스텝업을 위해 RxSwift를 공부했다.
옵저버 패턴을 알고 있었기에 Rx의 개념은 이해하기 쉬웠다.
내가 개발 공부를 하면서 항상 느끼는 건, 개발은 추상적인 개념이 너무 많고 주관적이기 때문에 실제 코드에 어떻게 적용해야하는지 모르겠다는 것이다. (예를 들면, 디자인 패턴을 어떻게 구현하고 어떻게 적용할지?, Relay와 Subject 중 어떤 것을 사용할지?)
이러한 딜레마를 해결하기 위해서는 프로젝트 경험을 쌓는 것이 중요하다고 생각하는 입장이기 때문에, 간단한 토이프로젝트를 진행하기로 했다.
Rx를 이용해서 프로젝트를 진행해보니 아직 많이 부족하다고 생각이 들었다.
1. map, filter를 제외한 다른 오퍼레이터를 활용하지 못한 점.
2. Observer와 Observable을 제대로 이해하지 못한 점.
3. UI를 메인 쓰레드가 아닌 다른 쓰레드에서 동작시킨 점.
4. Relay와 Subject를 혼동하여 사용한 점.
5. Driver를 배제하고 개발한 점.
6. Single을 배제하고 개발한 점.
위의 내용 외에도 문제점이 많았지만, 큰 이유는 위와 같은 이유 때문에 다시 Rx를 공부하고자 다짐했다.
Rx를 다시 공부하면서 작성한 요약&정리를 블로그에 기록해서 다시 한번 다듬고자 한다.
Observable과 Observer
Rx의 핵심 개념은 Observable과 Observer일 것이다.
Observable은 관찰 가능한 흐름으로, 비동기 이벤트 시퀸스를 생성할 수 있는 대상이고, Observer는 Observable을 관찰하는 대상이다.
Observer가 Observable을 관찰하기 위해서는 Subscribe(구독)를 해야한다.
Subscribe 메소드에는 onNext, onError, onCompleted, onDisposed가 있다.
onNext : item을 emit할 때 호출
onError: err 발생 시 호출
onCompleted : 이벤트가 종료 되었을 때 호출
onDisposed : Dispose 되었을 때 호출
Disposable
subscribe 메소드의 정의를 보면 Return 값으로 Disposable을 반환하는 것을 알 수 있다.
Disposable은 dispose()를 가진 Protocol로 정의 되어 있다.
즉, subscribe는 구독을 해제할 때 사용하는 Disposable 인스턴스를 Return한다.
➡️ Observable의 구독을 해제할 때 사용한다.
✅ Observable은 onCompleted나 onError가 발생하기 전까지 계속 Event를 Emit한다. 따라서 Event가 더이상 Emit되면 안되는 시점에서 직접 deinit해야한다.
➡️ Rx에서는 dispose 메소드를 호출하여 해당 Observable에 대한 리소스를 deinit한다.
✅ 만약 해제해야할 리소스가 많을 때, 일일이 dispose를 하는 것은 번거롭다.
➡️ DisposeBag : Disposable을 담는 배열, disposeBag을 생성 후 사용하며, disposed(by bag: DisposeBag) 메소드를 이용하여 Bag을 사용한다.
생성 연산자
내용이 길어서 노트 이미지로 대체
필터링 연산
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] RxSwift와 RxCocoa로 Toggle Button 구현하기 (0) | 2024.05.02 |
---|---|
[iOS/RxSwift] RxSwift 완벽 정리 - 2 (0) | 2024.03.07 |
[iOS/RxSwift] Next, Error, Completed 처리하기 (0) | 2024.02.03 |
[iOS/RxSwift] Subject가 무엇일까? (0) | 2024.02.03 |
[iOS/RxSwift] Operators - Map, Filter (0) | 2024.02.03 |