1. 일반 명령형 프로그래밍과의 차이
// 명령형 프로그래밍
var b = 27
var c = 33
var a = b + c
print(a) // 60
vart c = 40
print(a) // 60
// 반응형 프로그래밍
var b = 27
var c = 33
var a = b + c
print(a) // 60
var c = 40
print(a) // 67
일반 명령형 프로그래밍은 a의 값을 정한 후 c의 값이 바뀌여도 a의 값은 바뀌지 않는다. 하지만 반응형 프로그래밍은 c의 값이 변하는 것에 반응하여 a 의 값 또한 변한다. 반응형 프로그래밍을 대표하는 프로그래밍 예시는 엑셀이다.
2. 용어 정리
- Subject : Observable 과 Observer 를 한꺼번에 부르는 용어. 기본적으로 관찰하거나 관찰 당함.
- BehaviorSubject : 구독하면 Subject 에 의해 반환한 가장 최근 값을 가져오고, 구독 이후에 반환하는 값을 가져온다.
- PublishSubject : 구독하면 구독 이후에 반환하는 값을 가져온다.
- ReplaySubject : 구독하면 구독 이후 반환하는 값과 구독 이전에 반환한 값을 가져온다. 이전 반환 값은 구독하는 ReplaySubject의 버퍼 사이즈에 따라 다르다. 버퍼 사이즈는 Subject의 초기화 일 때 알 수 있다.
- Variable : Behaviorsubject를 감싸는 .onNext() 이벤트만 제출할 수 있는 래퍼런스.
3. Observable
- Hot 과 Cold로 구분된다.
- Hot Observable
- 생성과 동시에 이벤트를 방출, subscribe 되는 시점과 상관없이 옵저버들에게 이벤트를 중간부터 전송해준다.
- 관련 메소드 : publish / multicast / connect / replay / replayAll / share / shareReplay / shareReplayLatestWhileConnected
- 생성과 동시에 이벤트를 방출, subscribe 되는 시점과 상관없이 옵저버들에게 이벤트를 중간부터 전송해준다.
- Cold Observable
- 옵저버가 subscribe 되는 시전부터 이벤트를 생성하여 방출하기 시작.
- 기본적으로 Hot Observable로 생성하지 않은 것들이 Cold Observable 이라고 생각하면 된다.
- 옵저버가 subscribe 되는 시전부터 이벤트를 생성하여 방출하기 시작.
- 이해를 돕기 위한 설명
- 티비 지상파 방송은 시청자(observer) 가 어느 시점에 방송을 청취하던지 상관없이 방송이 진행된다. 시청자는 방송을 시청(subscribe) 하는 시점 (middle emit event) 부터 방송을 볼 수 있다. (이벤트를 받을 수 있다) —> 이 개념이 Hot Observable
- VOD의 경우 어떤 시청자(observer)가 시청을 시작하면(subscribe) 처음부터 방송이 시작된다. (emit 1,2,3 처럼) —> 이 개념이 Cold Observable이다.
- 티비 지상파 방송은 시청자(observer) 가 어느 시점에 방송을 청취하던지 상관없이 방송이 진행된다. 시청자는 방송을 시청(subscribe) 하는 시점 (middle emit event) 부터 방송을 볼 수 있다. (이벤트를 받을 수 있다) —> 이 개념이 Hot Observable
- Hot Observable
3. Data Flow
- Control Flow - Goto - if / then / else - switch / case - for / while
- Data Flow - Stateless - recursion - pipe
- RxSwift의 핵심 개념은 옵저버블과 데이터 플로우
4. RxSwift 장점
- 비동기/이벤트의 스트림 - 비동기와 이벤트가 스트림으로 흐른다는 것.
5. 정리
- flatmap : flatten과 map을 합친 오퍼레이터로 옵저버블을 언래핑해주는 오퍼레이터, Observable에서 발행한 아이템을 다른 Observable로 만들며 발생한 아이템을 구독하며 출력.
- throttle : 지정한 시간 동안 생긴 옵저버블 아이템 중 마지막 것을 선택해주는 오퍼레이터
- flatMapFirst : 새로운 Observable를 만들고 새로운 Observable은 동작이 다 끝날 때까지 새로 발행된 아이템을 무시.
- flatmapLast : 새로운 Observable을 만들고 새로운 Observable이 동작하는 중에 새로 발행된 아이템이 전달되면, 만들어진 Observable은 dispose하고 새로운 Observable을 만듭니다.
- drive : 에러가 없고 메인스케쥴러에서 사용됨.
- never Observable을 생성하면 any event를 방출함
- empty Observable을 생성하면 Completedevent를 방출함
- just Observable 을 생성하면 단일 이벤트 Observable이 생성된다.
- of Observable을 생성하면 고정된 크기의 배열의 가지는 Observable이 생성된다.
- from Observable을 생성하면 Swift의 Array, Dictionary, Set과 같은 순차적 이벤트를 발생하는 Observable을 생성한다.
- Create 는 Custom Observable을 생성한다.
- range : 설정한 Range 내의 이벤트를 발생, 설정한 Element로 반복적으로 이벤트를 발생
- repeatElement : element를 반복설정한 수 만큼 반복시킨다.
- generate : value를 condition 값이 true일때까지 iterate 한다.
- deferred : subscribe가 발생할때 observable을 생성한다.
- error : 아이템을 방출하지 않고 즉시 종료한다.
- doOn : 로그를 적거나 에러를 출력하거나 완료 여부를 출력하는 코드를 작성할 수 있다.
- PublishSubject : subscribe 한 후의 이벤트만 emit 한다. 에러 이벤트가 발생하면 그 후의 이벤트를 emit 하지 않는다.
- BehaviorSubject : subscribe 되기 전 이전 마지막 이벤트 또는 초기값을 emit 한다. 초기화가 반드시 필요하다.
- ReplySubject : 미리 정해진 사이즈만큼 가장 최근의 이벤트를 새로운 subscribe에게 전달합니다