RxSwift
RxSwift 란?
RxSwift란 Reactive Programming in Swift 이다.
→ Swift를 반응형 프로그래밍으로 설계 하는 것
1. 반응형 프로그래밍 (Reactive Programming)
반응형 프로그래밍이란, 데이터의 흐름 및 변경사항을 전파하는 데 중점을 둔 프로그래밍 패러다임이다.
이 패러다임을 사용할 경우, 주변 환경/데이터에 변화가 생길 때 연결된 실행 모델들이 이 이벤트를 받아 동작하도록 설계하는 방식이다.
예를들어
var a = 10
var b = 20
var sum = a + b
sum // 30
Swift
복사
여기서 만약 a라는 변수의 값이 바뀐다면,
a = 20
sum // 30
Swift
복사
일반적인 프로그래밍을 경우,
sum의 타입은 Int 타입이고, 대입할 당시의 a의 값을 복사하였고, 우리는 sum에 a가 바꼈다고 어떠한 작업을 해주지 않았기 때문에, sum이 a+b 였긴 하지만, a의 값이 바뀌었다고 해서 sum의 값이 바뀌진 않는다.
하지만, 반응형 프로그래밍에서는,
a = 20
sum // 40
Swift
복사
a값을 20으로 바꾸면, a가 바뀐 이후 우리가 어떠한 작업을 추가적으로 해주지 않아도, sum의 값이 바뀌어야 한다.
어떻게 가능한 일일까?
반응형 프로그래밍 은 데이터의 흐름 및 변경사항을 ‘전파’ 하는데 중점을 둔다.
만약 변경사항이 일어났을 경우, 연결된 ‘실행 모델 ’ 들이 이 이벤트를 받는다.
지금 a라는 데이터의 흐름이 기존 10에서 20으로 변경 되었을 때, 이 변경사항에 대해서 a와 연결되어 있는 sum(실행 모델)이 이벤트를 ‘전파’ 받아서 어떠한 동작(값 갱신)을 할 수 있는 것이다.
→ 이것이 반응형 프로그래밍 이다.
이제 sum, 즉 실행 모델 은 a의 값이 바뀌는지 안바뀌는지에 대해서 ‘관찰’을 하고 있어야한다.
또한 a의 값이 바뀌었을 때, 관찰 중인 sum에게 이를 전파 해야한다.
그리고 해당 이벤트를 전파 받았을 때, 어떤 일을 할지 sum에서 정하면 된다.
이 일을 가능하게 해주는 것이 RxSwift의
Observable, Observer, Operater 이다.
유저의 ‘반응’이 비동기적으로 왔을 때, 즉 어떤 데이터의 흐름이 바뀌었을 때, 이 반응에 대해 관찰을 하는 주체가 있다면,
변화가 일어났을 때, 이 관찰하던 주체는 이 변화에 대해 전파를 받을 수 있고, 따라서 변화에 대한 어떤 동작을 진행할 수 있다.
→ 반응형 프로그래밍
사실 Swift에서도 Notification, Delegate Pattern, Closure 등으로 충분히 구현가능하지만,
기존 프로그래밍 방법들로 했을 때의 발생할 수 있는 한계점(쓰레드 넘나들기, 비동기 코드 처리로 인한 코드 뎁스 깊어지는 문제 등) 을 해결해줄 수 있는 것이 Reactive Programming, 즉 RxSwift 이다.
요약
어떠한 비동기 이벤트가 있을 때, 그 이벤트를 관찰하는 주체가 존재하고, 만약 이벤트가 발생한다면, 관찰하는 주체는 해당 이벤트(데이터 흐름 변경)에 대해 전파 받을 수 있고,
따라서 그에 대응한 어떠한 작업을 할 수 있다.
이는 Swift로도 충분히 가능하지만, RxSwift를 사용하면 좀 더 편리하다.
그리고 그것이 어떻게 가능하게 해주는지는 앞으로 RxSwift의 Observable, Observer, 다양한 Operator 들을 통해 배우면 된다.
RxSwift 정의 다시보기
RxSwift는 비동기 프로그래밍을 관찰 가능한 순차적 형태와 함수 형태의 연산자를 통해 처리하게 끔 도와준다.
RxSwift는 반응형 프로그래밍이기 때문에, 어떤 비동기 이벤트에 대해 관찰 가능한 형태로 만들고, 함수 형태의 연산자를 통해 이 비동기 이벤트의 변화에 따른 전파를 받을 수 있고, 또한 여러 연산을 처리할 수 있게 한다.