[RxSwift] Combining Operators

startWith
- 옵저버블 시퀀스 앞에 새로운 요소를 추가하는 연산자
- 주로 기본값이나 시작값을 지정할 때 활용

concat
- 두 개의 옵저버블을 연결하는 연산자
- 타입 메소드, 인스턴스 메소드 두 가지
- 대상 옵저버블이 completed 이벤트를 전달한 경우에만 옵저버블 연결 후 전달
- error이벤트가 전달된 경우 대상 옵저버블만 전달됨
- completed는 연결된 모든 요소가 전달되면 전달됨


merge
- 여러 옵저버블이 방출하는 이벤트를 하나의 옵저버블에서 방출하도록 병합하는 연산자
- 하나의 옵저버블이 모든 요소를 방출하고 completed를 전달하면 이어지는 옵저버블을 연결하는
concat
과 달리, merge
는 두 개 이상의 옵저버블을 병합하고 모든 옵저버블에서 방출하는 요소들을 순서대로 방출하는 옵저버블을 리턴
- 병합 가능 옵저버블 수에는 제약이 없다.
- 제약을 원한다면,
merge(maxConcurrent:)
사용
- 만약 2개로 제한했는데 3개의 옵저버블을 merge했을 때, 앞선 두 옵저버블 중 먼저 completed를 전달한 옵저버블을 제외하고 나머지 옵저버블이 merge대상에 포함된다.



- 이후 각 옵저버블에 next이벤트를 전달하더라도 하나의 옵저버블이 전달한것으로 된다.

merge
가 종료되는 시점은 merge된 옵저버블 모두가 completed를 전달하는 시점이다.

- 그러나 병합 대상 중 하나라도 error이벤트를 전달한다면 그 즉시 error이벤트를 전달하고 종료한다.
combineLatest

- 소스 옵저버블이 방출하는 최신 요소를 병합하는 연산자


- 모든 combine 대상자가 completed를 전달해야지만 종료된다.
- 그 전까진, completed를 전달한 대상자의 최신 요소와 병합되어 전달된다.
- combine 대상자 중 하나라도 error이벤트를 전달한다면 그 즉시 종료
zip

- Indexed Sequencing을 구현하는 연산자
- 결합하는건
combineLatest
와 동일하나, 순서대로 짝이 맞춰져야 결합된 후 전달

- 마찬가지로 zip에 참여한 옵저버블 모두 completed를 전달해야 종료되며, 하나라도 error이벤트 전달시 그 즉시 종료된다.
withLatestFrom
- 트리거 옵저버블이 Next 이벤트를 방출하면 데이터 옵저버블이 가장 최근에 방출한 Next 이벤트를 구독자에게 전달하는 연산자
- 회원가입하는 시점에 텍스트필드에 입력된 값을 가져오기 등에 사용

- 만약 data에서 error을 전달한다면 바로 error가 전달되고 종료된다.
sample
- 트리거 옵저버블이 Next 이벤트를 전달할 때마다 데이터 옵저버블이 Next 이벤트를 방출하지만, 동일한 Next 이벤트를 반복해서 방출하지 않는 연산자
withLatestFrom
과 달리, dataObservable.sample(triggerObservable)
식으로 사용
(파라미터가 반대)

withLatestFrom
과 달리, 데이터 옵저버블이 completed를 방출하면 바로 전달
- 마찬가지로 데이터 옵저버블이 error이벤트를 방출하면 트리거 옵저버블이 onNext를 하지 않더라도 바로 전달
switchLatest
- 가장 최근에 방출된 옵저버블을 구독하고, 이 옵저버블이 전달하는 이벤트를 구독자에게 전달하는 연산자
- 소스로 completed 이벤트를 전달해야만 종료됨.
- 최신 옵저버블이 completed 이벤트를 전달하는건 관련 없음
- 최신 옵저버블이 error이벤트를 전달한다면 즉시 전달
- 반면, 최신 옵저버블이 아닌데 error이벤트 전달하면 X

reduce
- 시드 값과 옵저버블이 방출하는 요소를 대상으로 클로저를 실행하고 최종 결과를 옵저버블로 방출하는 연산자
scan
과 달리 중간값을 방출하지 않음
