RxSwift Ch1
RxSwift 스터디 GitHub 를 보고 하나씩 따라하는 곳입니다
Ch1. Hello RxSwift
Rx란?
Rx is a generic abstraction of computation expressed through Observable interface, which lets you broadcast and subscribe to values and other events from an Observable stream.
Rx는 관찰가능한 인터페이스를 통해 표현되는 계산의 일반적인 추상화입니다. 이를 통해 관찰 가능한 스트림의 값 및 기타 이벤트를 브로드캐스트 하거나 구독할 수 있습니다.
A. RxSwift란?
Rx의 Swift 버전, Swfit로 작성한 코드가, 새로운 데이터에 반응하고, 순차적으로 분리된 방식으로 처리할 수 있게 하므로써, 비동기 프로그래밍을 쉽게 구현할 수 있게 해주는 프레임워크
B. Cocoa and UIKit Asynchronous APIs
그러면 UIKit에서는 비동기 프로그래밍을 못할까요? (x)
아래의 방법들이 있습니다
- Notificaiton Center
- delegate pattern
- GCD
- completion closure
하지만, 내가 어떤 앱 코드를 작성했을때, 각 클래스가 어떤식으로 동작하는지 추적을 하는것은 불가능한 문제가 있습니다!
C. 비동기 프로그래밍 용어들
1. State
State는 상태를 의미합니다.
그리고 State에 따라서 같은 함수인데도 동작이 달라질 수도 있습니다
2. 명령형 프로그래밍
프로그램밍의 상태와 상태를 변경시키는 구문의 관점에서 프로그래밍하는것!
복잡한 비동기 앱을 만들기 위해 명령형 프로그래밍은 너무 힘들다.. ㅠㅠ
func doSomething() {
cleanRoom()
eatLunch()
goRunning()
playGame()
}
각각의 매서드가 순서대로 동작하는데, 각 매서드가 앱의 상태를 바꿔버릴 수가 있죠?
그러면 추적하기도 힘들고, 이 함수가 앱의 state를 변경할지 안할지도 알수가 없어요 ㅠ
3. 부수작용
- 현재 scope외의 상태에서 일어나는 모든 변화를 뜻합니다
- 위에서 cleanRoom ~ playGame이라는 함수를 실행 시켰는데, 이 함수들이 app의 state를 변경할 수도 있죠? 그거 자체는 문제가 안되는데, 컨트롤이 되냐 안되냐가 바로 문제입니다 ㅠ
4. 선언형 코드
- 명령형 프로그래밍, 객체지향 프로그래밍에서는 상태 변화는 자유자재로 가능합니다
- 함수형 프로그래밍에서는 부작용을 허용하지 않습니다
- RxSwift는 명령형과 함수형을 결합하여 동작합니다
- 자유로운 상태변화와 + 추적/예측가능한 결과값을 모두 얻을수 있게 됩니다
D. RxSwift 기초
1. Observables
- Rx코드의 기반이고, 전달가능한 이벤트를 비동기적으로 생성합니다
- Observable은 이벤트를 방출하고, observer는 해당 이벤트를 구독합니다
- next: 다음 데이터를 전달하는 이벤트
- completed: 이벤트를 정상적으로 종료시킴
- error: 에러를 발생시키고, 이벤트를 종료시킴
2. Operators
- 비동기 작업을 추상화하기위한 여러 매서드를 연산자라고 부릅니다
- 한두개가 아님.... map, filter, flatMap, skip 등등
E. App Architecture
RxSwift는 기존의 앱 아키텍쳐와 상관이 없으나, MVVM과 함께 사용하면 매우 멋지게 동작합니다 :)
View Model에서 Observable로 값을 방출하고, View에서는 그 값을 받기만 해서 사용하는거죠!
F. RxCocoa
RxSwift는 UIKit과 Cocoa 프레임워크에 포함된 클래스에 대한 아무 정보가 없습니다. 그래서 RxCocoa라는 라이브러리를 같이 사용해야, UI와 연동하여 제대로 사용할 수 있게됩니다
Author And Source
이 문제에 관하여(RxSwift Ch1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@aurora_97/RxSwift-Ch1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)