티스토리 뷰

RxSwift

[RxSwift] Operator, Transforming Observables

Hani_Levenshtein 2021. 7. 15. 18:12

안녕하세요 Hani입니다.

이번엔 Observable의 item을 변환시켜주는 Operator에 대하여 알아보겠습니다.

 

 

🔥🔥


Buffer

 

 

 

Observable의 item을 일정 개수 묶어서 버퍼에 저장한 후, 방출하도록 만드는 Operator인 Buffer입니다.

 

item이 없는 게 확실해질 때까지 배열에 담기 때문에, 마지막엔 빈 배열을 방출하는 것을 볼 수 있습니다.

 

 

range처럼 데이터가 이미 Observable에 있는 경우는 곧바로 출력이 되지만

interval같이 일정 시간 간격으로 들어오는 item은 timeSpan마다 최대 count만큼 배열에 묶여 방출됩니다.

count만큼의 item이 없으면 없는대로 방출합니다.

 

interval이나 buffer가 시간 보장이 안 되는 것 같습니다. 🥺

왜 세개씩 안 나와!

 


Map

map을 이용하면 Observable의 item을 다른 item으로 변환할 수 있습니다.

간-단

 


FlatMap

flatMap은 Observable의 item을 다른 새로운 아이템으로 변환시킬 수 있습니다.

그런데 flatMap은 Observable을 변환하는 과정에서 item들의 순서가 유지되는 것을 보장하지 않습니다.

 

한 item이 변환되는 중에 다음 item이 변환되려 내려올 수 있기 때문..! 🔥

 


Scan

scan은 Observable이 가진 item들의 누적된 결과를 중간과정을 포함하여 알 수 있습니다. 

 


Window

 

window는 하나의 Observable을 나눠서 여러 Observable로 나눕니다.

 

window의 결과물은 Observable을 item으로 갖고 있는 Observable입니다. 

마치 2차원 배열 같은..?

 

따라서 window가 변환한 Observable의 item은 Observable이기 때문에

이 Observable을 개별적으로 subscribe하면 window에 의해 나눠진 item을 얻을 수 있습니다.

 

제 생각이지만 Marble이 사선으로 되어있는 건 

Marble의 순서가 앞뒤로 섞이지 않아서 기존 Observable이 가지고 있는 item의 순서가 유지된다는 것 같아요. 👍


GroupBy

 

=_=  사진이 너무 작나?

groupBy는 Observable을 Key값을 통해 분류하여 item을 나눠주는 operator입니다.

 

groupBy의 리턴 값은GroupedObservable인데

GroupedObservable은 Key와 그 Observable이 갖게 될 item들이 들어있습니다.

 

 


References

http://reactivex.io/documentation/operators.html

댓글