RxSwift는 Reactive Programming(반응형 프로그래밍) 패러다임을 Swift에 적용할 수 있도록 해주는 라이브러리이다.
Reactive Programming의 기본 개념은 데이터와 이벤트의 변화를 스트림(stream) 형태로 관리하고, 이 변화를 구독(subscribe)하여 실시간으로 반응하는 것이다.
이 패러다임은 비동기 이벤트 처리와 데이터 흐름을 효율적으로 관리할 수 있게 해주며, 특히 UI 업데이트, 네트워크 요청, 사용자 입력 처리와 같은 작업에서 강력한 장점을 발휘한다.
Observable은 데이터의 스트림을 나타내는 객체입니다. 이 스트림은 단일 값, 여러 값, 또는 에러, 종료 이벤트를 포함할 수 있습니다. 옵저버블은 데이터가 변경되거나 이벤트가 발생할 때마다 이를 방출(emit)하고, 이를 Observer가 구독하여 처리합니다.
예를 들어, 사용자 입력, 네트워크 응답, 또는 UI 이벤트 등을 옵저버블로 표현할 수 있습니다.
Observer는 옵저버블의 변화를 감지하고 반응하는 객체입니다. 옵저버블이 이벤트나 데이터를 방출하면, 이를 받아서 처리하는 역할을 합니다.
옵저버블에 subscribe 메소드를 호출하여 옵저버가 옵저버블을 구독(subscribe)하게 되며, 이때 데이터를 받아서 원하는 작업을 수행할 수 있습니다.
옵저버가 옵저버블을 구독한 후에는, 더 이상 필요하지 않을 때 구독을 해제할 수 있습니다. 이때 Disposable 객체를 사용하여 구독을 해제하거나 메모리에서 해제하는 등의 작업을 수행할 수 있습니다.
메모리 누수를 방지하기 위해 구독 해제는 매우 중요한 작업입니다.
Subject는 Observable과 Observer의 역할을 모두 하는 특수한 객체입니다. 즉, 데이터를 방출할 수 있고, 다른 옵저버블을 구독할 수도 있습니다.
자주 사용하는 서브젝트의 종류:
PublishSubject: 구독이 시작된 이후의 새로운 이벤트만 방출.
BehaviorSubject: 초기값을 가지고 있으며, 최신 이벤트를 구독자에게 전달.
ReplaySubject: 지정된 버퍼 크기만큼 이전 이벤트를 메모리에 저장하여, 새로운 구독자에게 해당 이벤트들을 전달.
AsyncSubject: Observable이 종료될 때 마지막 이벤트만 전달.
스케줄러는 코드가 실행될 스레드 환경을 지정하는 역할을 합니다. 네트워크 요청은 백그라운드 스레드에서 실행하고, UI 업데이트는 메인 스레드에서 실행하도록 스케줄러를 지정할 수 있습니다.
RxSwift의 주요 스케줄러:
MainScheduler: 메인 스레드에서 실행.
ConcurrentDispatchQueueScheduler: 여러 작업을 병렬로 실행.
OperationQueueScheduler: OperationQueue 기반 스케줄러.
RxSwift의 강력한 점은 다양한 연산자를 사용하여 데이터 스트림을 변형하고 처리할 수 있다는 것입니다. 예를 들어, map, flatMap, filter, merge, combineLatest 등의 연산자를 사용하여 데이터를 변형하거나 병합, 결합할 수 있습니다.
연산자는 옵저버블의 데이터를 변경하거나 필터링하여 원하는 형태로 변형할 수 있습니다.