iOS/RxSwift

RxSwift란?

누알라리 2021. 11. 2. 02:08

https://github.com/ReactiveX/RxSwift 

 

GitHub - ReactiveX/RxSwift: Reactive Programming in Swift

Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.

github.com

RxSwift는 쉽게 말해 Swift를 이용해 Reactive Programming를 할 수 있는 라이브러리 입니다.

RxSwift가 제공하는 기본 개념을 통해 기존 델리게이트, 콜백 등에서 처리하던 비동기 처리를 직관적이고 쉽게 처리할 수 있으며,

제공하는 연산자들을 이용해 사용자가 원하는 고차원적인 로직을 구현할 수 있습니다.

 

Reactive Programming

반응형 프로그래밍이란 값이나 상태의 변화를 비동기적인 데이터 Stream으로 보고,

그 Stream에서 방출하는 값들을 이용해 이벤트를 처리하는 프로그래밍입니다.

 


 

여기까지가 여러 블로그나 강의 자료에서 설명하는 RxSwift입니다.

사실 Rx에 관한 기본 개념들은 이미 다른 블로그에 너무나도 많은 글들이 있기 때문에...

이 RxSwift 카테고리의 글들은 정말 제가 RxSwift를 공부하고, 적용하면서 느꼈던 한줄평들을 남기면서 기록하는 카테고리가 될 것 같습니다.

 

제가 생각하고 사용하는 RxSwift의 플로우를 간단히 그려보자면...

 

1. Rx 프로토콜을 채택한 UI Component에서 값이나 상태의 변화, Control Event 등이 발생한다.

2. 그 데이터를 Observable Stream으로 방출한다.

3. Observable을 에 여러가지 Operator(연산자)를 달아서 방출된 값을 사용자의 니즈에 맞게 가공한다.

4. Observable을 구독해서 데이터에 바인딩하거나, 비즈니스 로직에 사용한다.

 

RxSwift를 사용하면서 느낀점은...

 

1. 데이터 바인딩이 너무 깔끔해진다.

2. 비동기 처리를 위한 delegate, 콜백, handler 등의 코드가 사라지니 매우 깔끔해진다.

  •  특히 MVVM을 사용하는 프로젝트에서 ViewModel의 data를 관리할 때 너무 편했다.
  •  데이터를 방출하는 Observable을 생성하고, 그 데이터를 받아 쓰는 VC에서는 viewDidLoad에서 그 Observable을 Subscribe 하는 코드만 넣어주면 되니까.

3. 제공하는 연산자들을 잘만쓰면 대부분의 비즈니스 로직을 거의 커버할 수 있다..!

  •  현재까지의 작업에선 debounce, throttle, scan, filter, map, combining 관련 연산자들로 데이터 연산을 비교적 깔끔하게 할 수 있었다.

4. 팀원들이 모두 RxSwift에 대한 이해가 있으면, 막힌 부분에서의 브레인스토밍이 비교적 수월하다!

  •  이 연산자 써봐라 저 연산자 써봐라 그거 기억안나냐! 등 많은 토의가 있다.

5. 데이터를 뿌려주기만 해주고, 간단한 이벤트만 있는 TableView를 그릴 때 기존 delegate 여러개 써야하는 것 보다 훨씬 코드가 깔끔해진다.

  •   RxDataSource가 들어가면 아주 비효율적이 되는데, RxDataSource 없이 간단한 TableView를 그릴 때는 Rx를 사용해서 그리는것이 훨씬 깔끔하고 편하다.

 

현재까지로서는 느껴지는 단점이.... 러닝커브가 높다는 것과 디버깅이 어렵다는 점.