공부 시작 전 알아야 할 것들
선언형 프로그래밍이란 (vs. 명령형 프로그래밍)
반응형 프로그래밍: 데이터 스트림들과 변화의 전파와 관계되어있는 선언적인 프로그래밍 패러다임
명령형 프로그래밍 vs 선언형 프로그래밍
- 명령형 프로그래밍
- 알고리즘을 명시하고 목표를 명시하지 않는 것
- 하나하나 시간의 순서대로 명령하듯 프로그래밍하는 것
- 예시
- 차고로 가라.
- 차고를 열어라.
- 차에 타라.
- ...
- 우유가판대로 가라
- 우유를 집어라
- ...
- 선언형 프로그래밍
- 명확한 알고리즘을 명시하지 않고 데이터가 잘 흘러갈 수 있도록 제시만 해주는 것
- 예시
- 우유는 냉장고에 저장한다
- 냉장고는 물건을 시원하게 유지하는 장소이다
- 상점은 상품이 판매되는 장소이다
- 판매랑 돈과 사물을 교환하는 것을 의미한다
- ...
- 함수형 프로그래밍
- 함수형 프로그래밍은 선언형 프로그래밍의 일종
- 저료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다.명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리,함수형 프로그래밍은 함수의 응용을 강조한다.
Hello, RxSwift!
동기 프로그래밍 소개
RxSwift 기초
- 반응형 프로그래밍은 꽤 오래된 개념
Observables
- Observable<Element>는 Rx code의 기초를 제공한다
- Element 유형의 일반 데이터에 대한 불변 스냅샷을 전송할 수 있는 일련의 이벤트를 비동기적으로 생성할 수 있다
- Observable 클래스를 사용하면 한 명 이상의 관찰자가 모든 이벤트에 실시간으로 반응하고 앱의 UI를 업데이트하거나 새로운 데이터와 수신되는 데이터를 처리하고 활용할 수 있다.
- 세가지 이벤트를 가지고 있다
- next
- 최신 혹은 next 데이터 값을 전송한다
- 관찰자가 값을 수신하는 방식이다
- 종료 이벤트가 발생할 때 까지 이러한 값을 무한정 방출할 수 있다
- completed
- 성공 종료
- error
- 에러 종료
- next
유한 시퀀스
무한시퀀스
Operators
- 비동기 작업, 이벤트 조작의 개별 부분을 추상화하는 많은 메서드가 포함되어 있는데, 고도로 분리되고 구성 가능하기 때문에 오퍼레이터라고 불린다.
- 대부분 비동기 입력을 받고 사이드이펙트 없는 아웃풋을 생성하므로 쉽게 서로 잘 맞춰진다.
위 무한시퀀스 예제의 기기방향 변경 구독 코드는 오퍼레이터를 사용해 다음과 같이 바뀔 수 있다.
다음과 같은 순서로 데이터가 전달된다.
Schedulers
- 작업 대기열의 Rx 버전
- 이미 정의된 스케쥴러가 많음. 따로 정의할 필요 없음
- 동일한 구독의 다양한 작업을 예약할 수 있음
- RxSwift는 구독과 스케쥴러 사이에서 디스패쳐 역할을 하며 작업을 맞는 컨텍스트로 보내고 서로의 출력을 사용해 작업할 수 있도록 함
RxSwift는 구독(왼) 스케쥴러(오) 사이에서 디스패쳐 역할을 함
- 네트워크 구독에서 데이터를 가져오고
- 백그라운드 스캐쥴러에서 데이터 처리
- 메인 스케쥴러에서 UI 업데이트를 한다
앱 아키텍쳐
- RxSwift는 앱의 아키텍쳐를 바꾸지 않는다
- 대부분은 이벤트를 다루고, 비동기 데이터 시퀀스와 범용 통신 규약을 다룬다.
- 어떤 디자인패턴이든 사용할 수 있지만, MVVM과 특히 잘 어울린다.
- 뷰모델을 사용하면 UIKit control과 직접 연결할 수 있는 Observable 속성을 노출할 수 있도록 해주기 때문
- 이렇게 하면 모델 데이터를 UI에 바인딩하여 표현하기 간편하고 코드를 쉽게한다
RxCocoa
- 배경
- RxSwift는 플랫폼에 구애받지 않는 공통 Rx 사양을 구현한 것
- 따라서 Cocoa나 UIKit 관련 클래스에 대해서는 아무것도 모름
- RxCocoa는 UIkit와 Cocoa를 특별히 지원하는 RxSwift의 동반 라이브러리
- 많은 UI 이벤트를 구독할 수 있도록 UI 컴포넌트에 Reactive extension를 제공
- 예제
- 위 예제는 UISwitch의 state 변경을 구독하는 코드이다.
- rx.isOn 속성을 추가해 유용한 이벤트를 반응형 Observable 시퀀스로 구독할 수 있음
- 많은 UIKit 컴포넌트에 rx namespace가 추가되어있으며 커스텀할 수도 있다.
RxSwift 설치
생략
RxSwift vs Combine
- Notification Center나 Delegate 같은 전통 API를 사용하는 것보다 RxSwift를 통한 반응형 프로그래밍이 더 효과적임
- Combine vs RxSwift
- Combine
- 애플의 자체 반응형 프레임워크
- RxSwift와 비슷한 언어와 개념을 공유함
- RxSwift
- 오래되고 잘 만들어진 프레임워크
- Combine
요소 xkdlqdml
요소 xkdlqdml
xkdlqdml
'IT 도서 리뷰' 카테고리의 다른 글
함수형 반응형 프로그래밍 (0) | 2024.07.18 |
---|---|
[CS 전공지식 노트] CH4 데이터베이스 (0) | 2023.06.19 |
[CS 전공지식 노트] CH3 운영체제 (0) | 2023.06.14 |
[CS 전공지식 노트] CH2 네트워크 (0) | 2023.06.05 |
[CS 전공지식 노트] CH1 디자인패턴과 프로그래밍 패러다임 (0) | 2023.05.29 |