[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과 달리 중간값을 방출하지 않음 
