RxSwift) RxSwift 개요 (1)

Havi·2021년 2월 27일
0

RxSwift 기초

목록 보기
1/14

ReactiveX 란?

개요

ReactiveX는 observable sequences를 사용하여 비동기 및 이벤트 기반 프로그램을 구성하기위한 라이브러리입니다.

observer pattern을 확장하여 데이터 및 이벤트의 시퀀스를 지원한다.

ReactiveX는 종종 functional reactive programming이라 불리지만 이는 잘못된 표현이다.

ReactiveX는 functional일 수도, reactive일 수도 있다. 하지만 funtional & reactive는 다르다.

차이점의 중요 포인트 중 하나는 functional reactive programming은 시간이 지남에 따라 continuously하게 값이 바뀌지만, ReactiveX는 discrete하게 시간이 지남에 따라 방출된다.

참고

Observable을 사용하는 이유

ReactiveX Observable 모델을 사용하면, 배열과 같은 데이터 항목 모음에 사용하는 것과 동일한 종류의 simple하고 composable한 작업으로 비동기 이벤트 스트림을 처리 할 수 있다.

콜백지옥에서 벗어나게 되어 버그가 일어날 가능성이 적고, readable한 코드를 작성할 수 있다.

RxSwift 란?

RxSwift is the Swift-specific implementation of the Reactive Extensions standard.

즉 RxSwift란 Reactive Extensions 표준의 Swift 전용 implementation이다.

RxSwift를 사용하는 이유

Rx enables building apps in a declarative way.

즉 Rx를 사용하면 app을 선언적으로 build할 수 있다.

Bindings

viewModel
    .rows
    .bind(to: resultsTableView.rx.items(cellIdentifier: "WikipediaSearchCell", cellType: WikipediaSearchCell.self)) { (_, viewModel, cell) in
        cell.title = viewModel.title
        cell.url = viewModel.url
    }
    .disposed(by: disposeBag)

이런식으로 ViewModel과 바인딩이 쉬워진다.

Retires

API가 실패하지 않으면 좋겠지만, 실패한다.

func doSomethingIncredible(forWho: String) throws -> IncredibleThing

이 함수를 있는 그대로 사용하면 실패시 retry하기 굉장히 힘들다.

Rx를 쓰면 이렇게 간단하게 retry가능하다.

doSomethingIncredible("me")
    .retry(3)

Delegates

public func scrollViewDidScroll(scrollView: UIScrollView) { [weak self] // what scroll view is this bound to?
    self?.leftPositionConstraint.constant = scrollView.contentOffset.x
}

이 코드는 지루하고, expressive하지 않다.

self.resultsTableView
    .rx.contentOffset
    .map { $0.x }
    .bind(to: self.leftPositionConstraint.rx.constant)

이렇게 쓰자.

등등 많은 코드들을 선언적으로 사용할 수 있고, 읽기 쉽게 쓸 수 있다.

더 많은 예제는 공식 깃헙 참조

요약하자면, Rx는 코드를 다음과 같이 만들어준다.

  1. Composable
  2. Reusable
  3. Declarative - definition이 immutable하고, data만 바꾸기 때문
  4. Understandable & concise
  5. Stable
  6. Less stateful
  7. Without leaks

다음 글

profile
iOS Developer

0개의 댓글