-
안녕하세요. 그린입니다🟢
이번 포스팅에서는 RxSwift에 대해 기초적인 부분을 학습해보겠습니다🧑🏻💻
우선 이전 포스팅인 SwiftUI에 이어 RxSwift를 학습하기전 왜 이런것에 대해 배워야하는지 뭐가 중요한지 간략히 알아보겠습니다.
그러기 위해서는 우선 MVVM에 대해 알 필요가 있습니다.
MVC / MVP / MVVM
1. MVC
- 컨트롤러에서 사용자의 이벤트를 받고 모델에 데이터를 요청 및 변형하여 뷰에 업데이트 해주는 아키텍쳐 패턴
- 각각을 분리하여 의존성을 없애려했는데 뷰와 컨트롤러에서도 소통을 하기에 의존성이 생길 수 있어 재사용성이 낮아짐
2. MVP
- MVC와 동일한 개념으로 C대신 P가 들어간것으로 프레젠터로 변경
- 뷰와 프레젠터의 의존성 문제가 결국 나타남
3. MVVM
- 위 2가지의 아키텍쳐 패턴의 단점을 극복하고자 MVVM이 나오게됨
- 이벤트 흐름이 단방향으로 뷰 -> 뷰모델 -> 모델로 이루어짐
- Command 패턴과 Data Binding을 통해 의존성을 제거
- 숨어있는 (눈에 보이지는 않는) 바인딩을 통해 의존성을 제거하게됨 (뷰가 뷰모델을 관찰하고 있어 변화가 감지되면 바인딩을 통해 연결되어 있는 뷰가 변화됨)
RxSwift란?
- 스위프트 버전의 Rx 라이브러리
- Rx: Reactive Extensions(반응형 확장팩)으로 Swift 환경에서 비동기와 이벤트 기반 프로그램을 Observable sequences를 사용하여 구현하기 위한 라이브러리
- RxCocoa: 코코아 환경 (iOS/MacOS)에서 Rx를 하는 라이브러리
- 이벤트 기반임으로 HTTP 서버 통신이나 사용자의 터치 등 이벤트 발생이 될때 즉각 반응을 해주게되는 장점
- Binding을 통해 연결하고 DisposeBag 객체를 통해 연결을 해제해줌 (뷰컨트롤러가 해제될때 옵저버를 메모리에서 해제해주게 됨)
RxSwift의 3가지 요소?
1. Observables: 이벤트를 비동기적으로 생성하는 기능 (다른 부분에서 값을 구독하게 해줌)
2. Operators
3. Schedulers: 디스패치 큐와 비슷한 개념
[느낀점]
SwiftUI에서 조금 감이 왔었는데 RxSwift를 겪으니 감이 오는게 아니였구나 싶은 느낌이었다.
장점과 나중을 위한 필요성에 대해서는 인지를 하겠는데 막상 RxSwift를 통해 뷰의 이벤트를 처리하는 구현에 대해 낯설다고 해야하나..?
복잡한 느낌이 들었다. 또 느낀건 어렵지만 이벤트 기반임으로 SwiftUI와 함께 사용되면 애플이 추구하는 MVVM의 방향성과 맞을것 같다고 생각이 든다. SwiftUI와 더불어 기초만 보고 우선 다음에 여유가 될때 다시 학습해보기로...🥲
[참고자료]
야곰 iOS 캠프 RxSwift 강의
reactivex.io/documentation/observable.html
'RxSwift' 카테고리의 다른 글
RxSwift - Zip (0) 2021.10.13 RxSwift - Buffer & Window (0) 2021.10.06 RxSwfit - Debounce & Throttle (0) 2021.10.02 concat & merge (0) 2021.08.16 RxSwift - CombineLatest & withLatestFrom (0) 2021.08.09