-
RxSwift - 개요Programming/RxSwift 2022. 3. 3. 23:17
안녕하세요 BeePeach입니다 :)
오늘은 RxSwift에 대해서 공부를 해볼 예정입니다.
iOS 공부를 하다 보면 RxSwift는 한 번쯤 들어보셨을겁니다.
채용공고에도 우대사항에는 꼭 RxSwift 경험해보신 분이라는 문구가 있죠.
그래서 많은 신입개발자 분들이 RxSwift를 공부하려고 하실텐데요!
하지만 RxSwift를 왜 공부하는지 언제 사용하는지 모르고 무작정 시작하면 제대로 사용할 수 없습니다.
그래서 오늘은 RxSwift의 기본 개념에 대해서 공부해보도록 하겠습니다.
사용 이유
RxSwift는 Reactive Programming 아이디어를 Swift에 적용시킨 것입니다.
왜 Swift에 Reactive의 개념을 적용시켰을까요?
Reactive Programming를 사용하는 이유는 간단하게 설명하자면 Async와 MultiThread와 관련이 많습니다.
이중에서 MultiThread에 관한 문제는 Funtional Programming(FP)에서 중점적으로 다루는 문제입니다.
기기의 성능이 증가하고 여러 프로그램을 동시에 돌릴 수 있게 되면서
프로그램이 서로에게 영향을 미치지 않도록 Side Effect를 최대한 발생시키지 않게 func을 정의하고 데이터를 적용시키는 방식을 선호하게 됐습니다.
그런데 Multi Thread하면 생각나는 주요 문제는 바로 critical section입니다.
여러 스레드가 동시에 같은 지점에 접근만하는것은 괜찮지만 수정을 하는 순간 문제가 발생할 수 있습니다.
그래서 주로 여러 스레드가 동시에 접근하는것을 막아주는 Semaphore 같은 기법을 사용합니다.
그런데 성능향상을 위해서 여러개의 스레드를 사용하는데 막상 그 스레드들이 한번에 동작하지 못하게 하면 원하는 만큼 성능향상이 없겠죠?
이러한 문제들로 인해서 OOP 이후에 다시 관심을 받게된것이 바로 FP입니다.
FP를 간단하게 살펴보자면
- Data는 Immutable하게 정의하자.
- Data 변경이 필요하다면 원본으로부터 새로운 데이터를 생성하자.
- Side effect를 최소화 하기위해서 모든 데이터를 파라미터로 받고 외부 데이터를 변경하지 않는 pure function을 사용하자.
- 이러한 함수들을 조합하고 고차함수를 이용해서 데이터를 처리하자.
이러한 특징을 가지고 있습니다.
Reactive를 설명하다가 왜 FP를 설명하는지 의아할 수도 있습니다.
FP 개념에 따라서 코드를작성하는데 Async(비동기)와 관련된 코드를 작성하려고 보니 몇가지 보완하고 싶은 부분들이 생겨나기 시작했습니다.
그래서 Async 코드를 어떻게 FP적으로 쉽게 다룰 수 있을까?? 에서 생겨난 아이디어가 Reactive Programming입니다.
주요 개념
주요 개념은 immutable한 데이터를 stream에 담아서 데이터를 처리하는 것입니다.
Observable은 input은 없고 output이 stream인 함수입니다.
Observer는 input으로 stream을 받고 output은 없는 함수입니다.
Observable이라는 generator와 Observer라는 consumer를 서로 stream으로 연결시킨 후
데이터를 stream을 통해서 전달합니다.
(RxSwift에서는 stream이라는 말 대신 sequence라는 말을 사용합니다.)
만약 데이터를 변환해야 한다면 operator를 사용합니다.
Immutable한 데이터를 담아서 보낸다고 했죠?
그래서 Operator는 데이터 원본을 수정하지 않고 전달받은 데이터를 가지고 새로운 데이터를 만들어 냅니다.
이 방식을 이용하면 async한 코드를 작성할때 우리는 sync한 코드를 작성하듯 순서대로 읽기 편하게 작성할 수 있게 됩니다.
(우리가 코드를 작성할때 그렇게 보이는것이지 코드는 async하게 작동합니다.)
그리고 전달되는 데이터의 원본을 수정하지 않기 때문에 의도하지 않은 side effect를 방지할 수 있습니다.
오늘은 이렇게 왜 RxSwift를 사용하는지에 대해서 공부해보았습니다.
다음 포스팅부터 Observable, Observer에 대해서 알아보도록 하겠습니다.
참고자료
https://github.com/kzaher/RxSwift
https://www.youtube.com/watch?v=cXi_CmZuBgg
728x90'Programming > RxSwift' 카테고리의 다른 글
RxSwift - Trait (0) 2022.03.24 RxSwift - Observable factory (0) 2022.03.21 RxSwift - Disposable (0) 2022.03.17 RxSwift - Subscribe (0) 2022.03.17 RxSwift - Observable (0) 2022.03.05