Rxswift 반응형, 함수형 프로그래밍 방식을 갖습니다.
대표적으로 Reactive programming, Functional programming 모두 선언형 프로그래밍에 속하는 패러다임이다.
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.
정적 컨텐츠의 실시간 업데이트를 위해 비동기 프로그래밍 논리에 의존하는 디자인 패러다임을 말한다.
거의 모든 것을 순수함수로 나누어 문제를 해결하므로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이
‘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의 동작을 조작하거나 변환하는데 매개변수를 적극 활용)
비동기
- 작업이 순차적으로 실행되지 않고, 병렬로 실행되는 방식
- 이는 프로그램이 한 작업이 완료될 때까지 다음 작업을 기다리지 않고 동시에 여러 작업 처리 가능
🗣️ 비동기 프로그래밍 필요 순간
@available(iOS 4.0, *)
public func addObserverForName(name: String?, object obj: AnyObject?, queue: NSOperationQueue?, usingBlock block: (NSNotification) -> Void) -> NSObjectProtocol
NotificationCenter.default
.rx.notification(NSNotification.Name.UITextViewTextDidBeginEditing, object: myTextView)
.map { /*do something with data*/ }
....
public func scrollViewDidScroll(scrollView: UIScrollView) { [weak self] // what scroll view is this bound to?
self?.leftPositionConstraint.constant = scrollView.contentOffset.x
}
self.resultsTableView
.rx.contentOffset
.map { $0.x }
.bind(to: self.leftPositionConstraint.rx.constant)
Rx enables building apps in a declarative way.
Rx를 사용하면 선언적 방식으로(단순하고 직관적이게) 애플리케이션을 만들 수 있다.
(선언적 방식은 무엇을 해야할지 따로 약속을 만들어 기술하고 언제 어떻게 동작하는지는 내부에서 처리)
MVVM의 배경 : 데이터 바인딩을 제공하는 플렛폼에서 만들어진 이벤트 중심 프로그램을 위해 특별히 개발
RxSwift는 이와 연관성이 높음