RxSwift CH1: Hello RxSwift!

공부 시작 전 알아야 할 것들

 

선언형 프로그래밍이란 (vs. 명령형 프로그래밍)

반응형 프로그래밍: 데이터 스트림들과 변화의 전파와 관계되어있는 선언적인 프로그래밍 패러다임

명령형 프로그래밍 vs 선언형 프로그래밍

  • 명령형 프로그래밍
    • 알고리즘을 명시하고 목표를 명시하지 않는 것
    • 하나하나 시간의 순서대로 명령하듯 프로그래밍하는 것
    • 예시
      • 차고로 가라.
      • 차고를 열어라.
      • 차에 타라.
      • ...
      • 우유가판대로 가라
      • 우유를 집어라
      • ...
  • 선언형 프로그래밍
    • 명확한 알고리즘을 명시하지 않고 데이터가 잘 흘러갈 수 있도록 제시만 해주는 것
    • 예시
      • 우유는 냉장고에 저장한다
      • 냉장고는 물건을 시원하게 유지하는 장소이다
      • 상점은 상품이 판매되는 장소이다
      • 판매랑 돈과 사물을 교환하는 것을 의미한다
      • ...
       
    • 함수형 프로그래밍
      • 함수형 프로그래밍은 선언형 프로그래밍의 일종
      • 저료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리,함수형 프로그래밍은  함수의 응용을 강조한다.  



Hello, RxSwift!

동기 프로그래밍 소개

 

RxSwift 기초

  • 반응형 프로그래밍은 꽤 오래된 개념
  •  

Observables

  • Observable<Element>는 Rx code의 기초를 제공한다
  • Element 유형의 일반 데이터에 대한 불변 스냅샷을 전송할 수 있는 일련의 이벤트를 비동기적으로 생성할 수 있다 
  • Observable 클래스를 사용하면 한 명 이상의 관찰자가 모든 이벤트에 실시간으로 반응하고 앱의 UI를 업데이트하거나 새로운 데이터와 수신되는 데이터를 처리하고 활용할 수 있다. 
  • 세가지 이벤트를 가지고 있다
    • next
      • 최신 혹은 next 데이터 값을 전송한다
      • 관찰자가 값을 수신하는 방식이다
      • 종료 이벤트가 발생할 때 까지 이러한 값을 무한정 방출할 수 있다
    • completed
      • 성공 종료
    • error
      • 에러 종료

 

유한 시퀀스

 

무한시퀀스

 

 

 

Operators

  • 비동기 작업, 이벤트 조작의 개별 부분을 추상화하는 많은 메서드가 포함되어 있는데, 고도로 분리되고 구성 가능하기 때문에 오퍼레이터라고 불린다.
  • 대부분 비동기 입력을 받고 사이드이펙트 없는 아웃풋을 생성하므로 쉽게 서로 잘 맞춰진다.

위 무한시퀀스 예제의 기기방향 변경 구독 코드는 오퍼레이터를 사용해 다음과 같이 바뀔 수 있다.

다음과 같은 순서로 데이터가 전달된다.

 

 

Schedulers

  • 작업 대기열의 Rx 버전
  • 이미 정의된 스케쥴러가 많음. 따로 정의할 필요 없음
  • 동일한 구독의 다양한 작업을 예약할 수 있음
  • RxSwift는 구독과 스케쥴러 사이에서 디스패쳐 역할을 하며 작업을 맞는 컨텍스트로 보내고 서로의 출력을 사용해 작업할 수 있도록 함

 

RxSwift는 구독(왼) 스케쥴러(오) 사이에서 디스패쳐 역할을 함

  1. 네트워크 구독에서 데이터를 가져오고
  2. 백그라운드 스캐쥴러에서 데이터 처리
  3. 메인 스케쥴러에서 UI 업데이트를 한다

 

앱 아키텍쳐

  • RxSwift는 앱의 아키텍쳐를 바꾸지 않는다
  • 대부분은 이벤트를 다루고, 비동기 데이터 시퀀스와 범용 통신 규약을 다룬다.
  • 어떤 디자인패턴이든 사용할 수 있지만, MVVM과 특히 잘 어울린다.
    • 뷰모델을 사용하면 UIKit control과 직접 연결할 수 있는 Observable 속성을 노출할 수 있도록 해주기 때문
    • 이렇게 하면 모델 데이터를 UI에 바인딩하여 표현하기 간편하고 코드를 쉽게한다

 

RxCocoa

  • 배경
    • RxSwift는 플랫폼에 구애받지 않는 공통 Rx 사양을 구현한 것
    • 따라서 Cocoa나 UIKit 관련 클래스에 대해서는 아무것도 모름
    • RxCocoa는 UIkit와 Cocoa를 특별히 지원하는 RxSwift의 동반 라이브러리
    • 많은 UI 이벤트를 구독할 수 있도록 UI 컴포넌트에 Reactive extension를 제공

 

예시: UISwitch의 state 변경을 구독하는 코드

  •  예제
    • 위 예제는 UISwitch의 state 변경을 구독하는 코드이다.
    • rx.isOn 속성을 추가해 유용한 이벤트를 반응형 Observable 시퀀스로 구독할 수 있음
    • 많은 UIKit 컴포넌트에 rx namespace가 추가되어있으며 커스텀할 수도 있다.

 

RxSwift 설치

 생략

 

RxSwift vs Combine

  • Notification Center나 Delegate 같은 전통 API를 사용하는 것보다 RxSwift를 통한 반응형 프로그래밍이 더 효과적임
  • Combine vs RxSwift
    • Combine 
      • 애플의 자체 반응형 프레임워크
      • RxSwift와 비슷한 언어와 개념을 공유함
    • RxSwift
      • 오래되고 잘 만들어진 프레임워크

 

요소 xkdlqdml
 

 

요소 xkdlqdml
 

 

xkdlqdml