Rxswift 1교시 - Rxswift에 대해서 알아보자

어흥·2024년 5월 21일
0

iOS

목록 보기
3/10

Rxswift 반응형, 함수형 프로그래밍 방식을 갖습니다.

대표적으로 Reactive programming, Functional programming 모두 선언형 프로그래밍에 속하는 패러다임이다.

Reactive programming

  • 어떤 이벤트가 발생하면 subscribing하는 observer가 반응하고 UI를 실시간 업데이트
  • 데이터 흐름 및 변경사항을 전파하는데 중점 → 데이터가 바뀌는지 관찰

Reactive programming is programming with asynchronous data streams.

반응형 프로그래밍은 비동기 데이터 스트림과 함께하는 프로그래밍을 말한다.

Reactive programming describes a design paradigm that relies on asynchronous programming logic to handle real-time updates to otherwise static content.

정적 컨텐츠의 실시간 업데이트를 위해 비동기 프로그래밍 논리에 의존하는 디자인 패러다임을 말한다.

Functional programming

거의 모든 것을 순수함수로 나누어 문제를 해결하므로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이

  • 값이나 상태 변화 보다는 함수 자체의 응용 중시
  • 상태 값을 갖지 않고 순수하게 함수만으로 동작하므로 일정하게 같은 값 도출
  • 함수를 일급 객체로 취급 ⭐️⭐️⭐️ → 파라미터, 리턴값 사용 가능, 동적 프로퍼티 할당 가능

Rxswift란?

‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers.’
RxSwift는 observable한 시퀀스와 함수 형태의 연산자를 이용하여 비동기적이고 이벤트 기반 코드를 구성하고 스케줄러를 통해 parameterize된 실행을 가능하게 하는 라이브러리이다.

  • 관찰가능한 순차적인 형태 → Observable
  • 이벤트 변화를 관찰하여 전파하는 역할 → Observer

(parameterized execution은 매개변수를 적극 활용하여 실행은 제어하는 것을 말함, observable의 동작을 조작하거나 변환하는데 매개변수를 적극 활용)

⭐️ key word: 비동기 & 이벤트

비동기

  • 작업이 순차적으로 실행되지 않고, 병렬로 실행되는 방식
  • 이는 프로그램이 한 작업이 완료될 때까지 다음 작업을 기다리지 않고 동시에 여러 작업 처리 가능

🗣️ 비동기 프로그래밍 필요 순간

  • 네크워크 요청 처리 - 큰 용량 데이터 통신을 하는 경우
  • 데이터베이스 비동기 액세스 - 디스크에 데이터를 저장하는 경우
  • 오디오를 실행하는 경우

기존 비동기적인 이벤트 처리

  • Notification subscribe 메서드 하나만 호출하는 것과 달리 observer를 구독하려면, 4개의 파라미터가 필요하다.
    • Notification
      @available(iOS 4.0, *)
      public func addObserverForName(name: String?, object obj: AnyObject?, queue: NSOperationQueue?, usingBlock block: (NSNotification) -> Void) -> NSObjectProtocol
    • Rx
      NotificationCenter.default
          .rx.notification(NSNotification.Name.UITextViewTextDidBeginEditing, object: myTextView)
          .map {  /*do something with data*/ }
          ....
  • Delegate Pattern 수많은 프로토콜에 부딪히지 않아도 된다. 가독성이 많이 떨어진다.
    • Delegate
      public func scrollViewDidScroll(scrollView: UIScrollView) { [weak self] // what scroll view is this bound to?
          self?.leftPositionConstraint.constant = scrollView.contentOffset.x
      }
    • Rx
      self.resultsTableView
          .rx.contentOffset
          .map { $0.x }
          .bind(to: self.leftPositionConstraint.rx.constant)
  • Closure 비동기 코드 처리로 인한 코드 뎁스가 깊어져 구조가 복잡해진다.

왜 Rxswift를 써야하나요?

Rx enables building apps in a declarative way.
Rx를 사용하면 선언적 방식으로(단순하고 직관적이게) 애플리케이션을 만들 수 있다.

(선언적 방식은 무엇을 해야할지 따로 약속을 만들어 기술하고 언제 어떻게 동작하는지는 내부에서 처리)

MVVM과 밀접한 연관

MVVM의 배경 : 데이터 바인딩을 제공하는 플렛폼에서 만들어진 이벤트 중심 프로그램을 위해 특별히 개발

RxSwift는 이와 연관성이 높음

Benefits

  • Composable <- Rx는 조합 그 자체이기 때문
  • Reusable <- 조합 때문
  • Declarative <- 정의는 immutable하고 데이터 값만 바뀌기 때문
  • Understandable and concise <- 추상화 레벨이 높아지고 일시적인 상태가 제거되기 때문
  • Stable <- Rx는 철저한 유닛 테스트를 거치기 때문
  • Less stateful <- 단방향 데이터 흐름을 사용하여 테스트를 거치기 때문
  • Without leaks <- 자원 관리가 쉽기 떄문

0개의 댓글