[RxSwift] RxSwift의 개념

·2024년 3월 25일

RxSwift

목록 보기
1/4

RxSwift 개요

RxSwift는 반응형 프로그래밍을이다. 여기서 반응형 프로그래밍은 데이터의 흐름 및 변경 사항을 전파하는 데에 중점을 두는 프로그래밍이다.
공식 사이트에는 observable streams를 통한 asynchronous programming을 지원한다고 적혀져 있다. 즉, 동시성 관리와 데이터 흐름을 간결하고 선언적으로 표현할 수 있게 해준다는 것인데, observable streamsasynchronous programming에 대해 더 자세히 알아보자.


Asynchronous Programming

비동기 프로그래밍(asynchronous programming)은 여러 작업이 동시에 실행될 수 있도록 하는 프로그래밍 방식이다. 이를 통해 사용자 인터페이스가 멈추지 않고 부드럽게 작동하도록 할 수 있다.
iOS에서는 closure, GCD, Delegate Pattern, Notification Center 등을 이용해 비동기 작업을 관리한다. RxSwift는 이러한 전통적 비동기 처리 방식들을 통합하고, 추상화한다. 또한 thread 넘나들기, 비동기 코드 처리로 인해 코드 depth 깊어지기 등의 문제를 해결할 수 있다.


Observable Streams

데이터의 흐름을 stream이라고 한다. 이 stream을 통해 이벤트를 전달하고, 이러한 이벤트 스트림을 생성하는 것이 Observable. Observable은 이벤트를 계속해서 방출할 수 있으며, 이에 반해 이벤트를 받아서 처리하는 것은 Observer이다.:

Observable: 이벤트 소스로, 데이터나 이벤트를 방출한다. 대부분 UI 이벤트.
Observer: Observable에서 방출하는 데이터나 이벤트를 구독하는 역할을 한다. 예를 들어, 파일 다운로드는 시작과 끝이 명확.

이벤트를 전달하고(Observable) -> 이벤트를 처리한다(Observer)
버튼이 클릭되면(Observable) -> 레이블에 표시한다(Observer)
셀이 클릭되면(Observable) -> 화면 전환을 한다(Observer)
검색어를 입력하면(Observable) -> 검색 결과를 보여준다(Observer)
계속 이벤트를 전달하고(Observable) -> 계속 관찰하고 있어야 한다(Observer)

이러한 이벤트들의 공통점은 비동기적인 이벤트들이다. 언제 유저가 버튼을 누르고 키보드를 띄울지 우리는 예상할 수 없다..

즉, 유저의 반응이 비동기적으로 왔을 때(혹은 어떤 데이터의 흐름이 바뀌었을 때), 이 반응을 관찰하는 놈이 변화에 대한 어떤 동작을 진행할 수 있게끔 해주어야 한다.


Observer가 Observable을 구독하기 위해 사용하는 메서드가 Subscribe이며, 이 관계는 나중에 끊어질 수 있다. 이 과정을 Dispose라고 한다..

Subscribe: Observer가 Observable을 구독하는 과정이며, 이를 통해 데이터 스트림을 수신한다.
dispose: 구독을 종료하고, 더 이상 이벤트를 수신하지 않도록 한다.

Observable은 다음 세 가지 유형의 이벤트를 방출할 수 있다.

  • Next: 새로운 데이터가 방출(Emit). 계속해서 새로운 데이터를 추가하거나 업데이트할 때 사용.(점진적 다운로드, 최신 데이터 전달 등)
  • Completed: 이벤트 스트림(이미지 다운받기 완료 등)이 종료. 모든 데이터의 방출이 완료되었음을 의미.(Notification)
  • Error: 이벤트 스트림(디코딩 실패, 상태코드 오류, 네트워크 연결 유실 등) 중 오류가 발생하면 방출(Notification), 이후에는 더 이상의 이벤트가 발생하지 않는다.

RxSwift와 RxCocoa

RxSwift는 기본적인 reactive 프로그래밍 기능을 제공하는 반면, RxCocoa는 이를 iOS의 UIKit과 Cocoa 프레임워크에 특화시켜 확장한다. RxCocoa는 UI 컴포넌트를 reactive하게 바인딩할 수 있는 API를 제공하여, MVC, MVVM 등의 디자인 패턴을 더 효과적으로 구현할 수 있도록 돕는다.

RxSwift와 RxCocoa를 활용함으로써, 개발자는 애플리케이션의 데이터 바인딩, 이벤트 처리, 동시성 관리 등을 보다 선언적이고 직관적으로 설계할 수 있다.


참고
SeSAC 메모리스
https://babbab2.tistory.com/182

0개의 댓글