일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- UIDocument
- JSONEncoder
- UIGestureRecognizer
- Arc
- UIBezierPath
- MVP
- weak
- rxswift
- Codable
- Singleton Design Pattern
- UIDynamicAnimator
- 에어팟
- Stanford cs193p
- Observable
- AVFoundation
- IOS
- Hashable
- UIDocumentBrowserViewController
- Equatable
- CoreGraphics
- unowned
- CustomStringConvertible
- 오늘의성취도
- Git
- JSONDecoder
- PhotoKit
- uicollectionview
- NSAttributedString
- Swift
- reactivex
- Today
- Total
아직은 개린이
Reactive Programming, Rx 본문
Reactive Programming 이란?
Reactive Programming is programming with asynchronous data stream.
리액티브 프로그래밍의 주요 key는 비동기적인 데이터 흐름(stream)을 처리한다는 것이다. 쉽게 말해 데이터를 관찰(Observe)하고 있다가 무언가 변화가 생기면 그에 따른 데이터 혹은 UI 업데이트 같은 일을 수행하는 것이다.
a = b + c를 수행하는 함수가 있을 때 b와 c가 변해도 이 함수를 호출하지 않는 이상은 a 값이 변하지 않는 것이 명령형 프로그래밍의 특징이라면, 리액티브 프로그래밍에서는 b와 c가 변함과 동시에 b + c를 계산하여 a 값을 업데이트한다!
비동기 프로그래밍이 왜 필요한가?
사용자가 버튼을 눌렀을 때 그에 따른 액션 처리, 텍스트 필드에 포커스가 잡힌 경우, 인터넷에서 큰 크기의 이미지 파일을 받는 작업 수행 등등 프로그램에서는 다양한 일들이 동시다발적으로 발생한다. 이 과정에서 유저의 인터페이스를 방해하지 않으며 작업들이 이루어져야 하고, 변화가 있을 때 즉각적인 반응을 내기 위해서는 비동기 프로그래밍이 필수적이다.
왜 Rx인가?
iOS SDK에서 Closure, Notification, Delegate 등을 이용하면 비동기 처리가 가능하다. 하지만, 데이터 변화가 생기면 UI 업데이트를 명시적으로 호출해야 하거나 콜백 지옥이 생기는 등의 문제 요소들이 있다.
이때 Reactive eXtension의 줄임말로 비동기적인 이벤트를 쉽게 처리할 수 있는 라이브러리인 Rx를 사용하면 일관성 있는 비동기 코드 작성이 가능하고, 스레드 처리가 쉬워지는 등의 이점을 가질 수 있다.
코드 가독성이나 편리성을 위해 URLSession 대신 Alamofire 라이브러리를 사용하는 것처럼 Rx를 사용하는 것이다!
Rx는 .NET에서 만든 오픈소스로 RxSwift, RxJava, RxJs 등 다양한 언어에서 사용이 가능한 라이브러리이다.
Rx의 3요소
Rx는 Observable, Operator, Scheduler 크게 3가지 요소가 있다.
Observable은 데이터를 처리하고 다른 구성요소에 전달하는 역할, Observer는 Observable에 의해 방출된 데이터 스트림을 소비하는 역할을 한다. 앞으로 이어질 글에서 각 요소들에 대해 공부해보려 한다!
참고자료
- https://zeddios.tistory.com/689
- https://m.blog.naver.com/jdub7138/220983291803
'Swift + iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Subject (0) | 2021.10.11 |
---|---|
[RxSwift] Observable (2) (0) | 2021.10.11 |
[RxSwift] Observable (1) (0) | 2021.10.05 |