-
RxSwift 기초 + 개념 정리 및 Rx의 3대요소RxSwift 2021. 4. 30. 12:10
RxSwift?
우선 RxSwift를 공부하면서 가장 먼저 드는 의문은 '왜 RxSwift를 써야하는가?'가 아닐까 생각합니다.그에 대한 대답을 간단한 그림으로 알아보겠습니다.
이는 RxSwift 뿐만 아니라 RxJava, RxAndroid, RxKotlin, RxJS, etc.. 모든 ReativeX Programming에 접합되는 내용이라고 생각합니다.
한 블로거(Keval Patel)는 위 Evaluation matrix를 아래와 같이 설명합니다.
- 명시적 실행 : 새로운 Thread 작업을 할 때 그것을 컨트롤 할 수 있어야 하고, 백그라운드에서 작업을 시킬 때 그것에 대한 정보를 얻고 준비할 수 있어야합니다.
- 간편한 Thread 관리 : 비동기 작업이 핵심인 Rx에서는 당연하게도 여러 Thread를 이동하며 UI,연산,네트워킹 등의 여러가지 Task를 처리해야합니다. 네트워킹 같은 것을 Main Thread에서 처리 할 수 없으니 Background Thread에서 처리된 데이터를 UI를 처리할 Main Thread로 전달하여 처리하는 것이 수월해야할 것입니다.
- 쉬운 구성 난이도 : 비동기적인 작업을 실행시키고 그 작업들이 진행되기 시작할 때 완전히 독립적일 수 있다면 좋을 것입니다.
일반적으로 UI Thread에 의존하지않고 처리되야할 네트워킹등의 작업을 예로 들 수 있을 것 같습니다.
하지만 실제로는 UI를 업데이트하고, DB를 변경하고 Threading이 상호 종속적으로 연계되도록 여러 가지 작업을 수행(Chainning)이 필요합니다. 따라서 비동기 라이브러리들은 쉽게 구성할 수 있어야 하며 오류가 발생할 수 있는 곳을 최소한으로 제공하는 것이 옳을 것 입니다. - 부작용 최소화 : 여러 개의 Thread에서 작업하는 동안 다른 Thread는 최소한의 부작용(Side Effect)을 발생시켜야 합니다. Rx를 사용한다면 오류를 쉽게 추적할 수 있으며 이에 따라 그 메소드가 실행되기 전의 작업을 직접 지정하여 우회가 가능한 장점을 가지고 있습니다.
위 4가지로 인해 RxSwift로 가져오는 장점이 많다고 생각합니다.
특히나 MVVM 패턴에서 데이터를 바인딩할 때에도 잘 어울리며, 일반적인 코드들보다 유연하고 깔끔합니다.
뒤에 설명할 Observer와 Observable을 사용하여 UI를 최신 상태로 유지하기에도 좋으며 에러가 발생했을 때에도
유연하게 처리할 수 있습니다.
Rx의 3대 요소
- Observable
- 흔히 공급업체에 빗대어 설명하며 데이터의 흐름입니다.
- Observable은 데이터를 처리하고 다른 구성요소들(components)들에 제공합니다.
- 이벤트를 내보낼 수 있으며 기본적으로 주기적으로 또는 형태에 따라 수명 주기에 한 번만 데이터를 내보냅니다.
- 이를 가공하는 여러 Operator들이 존재하지만 이는 추후에 설명하도록 하겠습니다 - Observers
- 흔히 소비자로 빗대어 설명하는 관찰자입니다.
- Observable이 방출(emit)하는 데이터를 수신하기 위해 subscribeOn() 메소드를 사용하여 관찰 가능한 것을 구독합니다.
- Observable이 데이터를 내보낼 때마다 구독되어있는 모든 Observer가 onNext() 콜백에 데이터를 수신합니다.
- onNext() 메소드 내부에서 JSON response 구문에 대한 처리 또는 UI 업데이트 등과 같은 작업을 수행할 수 있습니다.
- 도중에 오류가 발생시 Observer는 onNext() 대신 onError()를 받습니다. - Schedulers
- 흔히 상점의 위치로 빗대어 설명합니다.
- Rx는 비동기 프로그래밍용이며 Thread 관리가 필요합니다. 이에 Scheduler는 Observable과 Observer에서
실행할 Thread를 알려줍니다.
- observeOn() 메소드를 사용하여 옵저빙해야 하는 Thread를 Observer에게 알려줄 수 있습니다.
- Swift에서 사용하던 DispatchQueue와 동일한 기능을 가지고 있습니다.
- Main Thread Serial Scheduler, Background concurrent Scheduler, Custom NSOperation Scheduler로 구분할 수 있습니다.
위 3가지 요소를 기반으로 마인드맵을 펼쳐나가듯 관련 지식들에 대한 포스팅을 추가로 다룰 예정입니다.
저처럼 ReativeX Programming을 시작한 분들에게 조금이나마 도움이 됐으면 좋겠습니다.
관련 자료 출처 : https://medium.com/@kevalpatel2106/what-is-reactive-programming-da37c1611382'RxSwift' 카테고리의 다른 글
RxSwift 핫 옵저버블(Hot Observable) & 콜드 옵저버블 (Cold Observable) (0) 2021.04.19 - 명시적 실행 : 새로운 Thread 작업을 할 때 그것을 컨트롤 할 수 있어야 하고, 백그라운드에서 작업을 시킬 때 그것에 대한 정보를 얻고 준비할 수 있어야합니다.