티스토리 뷰

RxSwift

[RxSwift] Operator, Create Observables

Hani_Levenshtein 2021. 6. 28. 23:04

안녕하세요 Hani입니다.

RxSwift의 Observable과 subscribe에 대하여 알아보았고,

이번엔 Operator에 대하여 알아볼 거예요. 🔥

 

operator는 Observable에 적용시키는 method입니다.

operator가 Observable에 어떻게 적용되는지는 Marble Diagram이라는 그림에 잘 나와있어요.

 

Marble Diagram

화살표 모양의 꼬챙이가 Observable이고 끼워져 있는 각 Marble은 Observable이 방출하는 event입니다.

화살표 끝부분이 일자로 막혀있는 부분은 Observable이 끝났다는 의미이고,

사각 박스는 operator이며, operator의 결과물은 Observable입니다.

 

Observable에 operator를 적용시킨 것에 또 operator를 연속적으로 적용시킬 수 있겠죠?

이걸 Chaining operators라고 합니다.

 

 

마블 다이어그램을 보고, 쓰고 싶은 operator를 찾아서 가져다 쓸 수도 있지만

어떤 operator가 있는지 한 번쯤은 둘러볼 필요가 있다고 생각돼서 하나씩 짚어볼 생각입니다.

 

나중에 어렴풋이 생각나겠죠 ^^..

 

이번 포스팅에서는 Observable을 생성하는 operator에 대하여 알아볼 거예요.

 

시작합니다..! 🔥


Create

 

옵저버의 메서드(onNext, onCompleted, onError)를 호출하여 맨 처음부터 Observable를 생성합니다.

Observable를 subscribe해보면 값이 Observable을 만들 때 호출한 메서드 순서대로 내용이 출력됨을 알 수 있습니다.

 


Empty

어떤 것도 방출(onNext)하지 않는, 그러나 완료되는(onCompleted) Observable을 생성합니다.

 


Never

어떤 것도 방출하지 않으며 완료되지도 않는 Observable을 생성합니다.

 


Throw

어떤 것도 방출하지 않으며 에러로 마무리되는 Observable을 생성합니다.

 


 From

한 배열을 통째로 넣어서 차례대로 출력해주는 Observable을 생성해주는 Operator인 From입니다.

from안에 배열을 집어넣어서 전달해줍니다.

 


Just

단 한 번, 값을 방출하는 Observable을 생성해주는 Operator인 Just입니다.

just에 원하는 값을 집어넣어서 전달해줍니다.

 

배열을 넣으면 하나씩 값이 넘어오는 from과 달리 배열이 통째로 넘어옵니다.

 


Range

 

특정 범위의 연속적인 정수를 방출하는 Observable을 생성해주는 Operator인 Range입니다.

 


Repeat

같은 값을 반복적으로 방출하는 Observable을 생성해주는 Repeat입니다.

반복 횟수를 take로 정해주지 않으면 값이 무한정 불리기 때문에 마블 다이어그램에 나와있는 것처럼 완료되지 않습니다.

 


 

Defer

코드를 보면 observable이라는 변수는 Observable 객체, 근데 이제 deferred가 곁들여진 것을 참조하고 있습니다.

Defer operator는 Observer가 observable을 subscribe하기 전까지 Observable를 생성하지 않고 미루다가,

subscribe하면 Observable를 새로 생성하도록 만듭니다.

 


Timer

2개의 전달 인자(지연 시간, 스케쥴러)로 구성된 Timer입니다.

주어진 지연시간 이후에 하나의 값이 방출되는 Observable을 생성해주는 Timer입니다.

 

 

3개의 전달인자(지연 시간, 주기, 스케쥴러)로 구성된 Timer입니다.

주어진 지연시간 이후에 주기마다 값이 방출되는 Observable을 생성해주는 Timer입니다.

 

3개의 전달 인자를 갖는 Timer에 대한 마블 다이어그램은 없지만..

반복 횟수를 take로 정해주지 않으면 값이 무한정 불리기 때문에 완료되지 않습니다.


Interval

주어진 시간 간격마다 연속적인 정수를 방출하는 Observable을 생성해주는 Interval입니다.

반복 횟수를 take로 정해주지 않으면 값이 무한정 불리기 때문에 마블 다이어그램에 나와있는 것처럼 완료되지 않습니다.

 

3개의 전달인자를 받는 Timer와 다른 점은

Timer는 처음 지연 시간과 이후 주기가 다를 수 있지만

Interval은 시간 간격을 하나만 받기 때문에 지연 시간과 주기가 같습니다.

 


References

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

 

'RxSwift' 카테고리의 다른 글

[RxSwift] subscribe, observe / Scheduler 관리  (0) 2021.07.11
[RxSwift] Closure ARC / Memory Leak 실험  (0) 2021.07.10
[RxSwift] Subject  (0) 2021.07.07
[RxSwift] Operator, Filtering Observables  (0) 2021.07.01
[RxSwift] Observable, Subscribe  (0) 2021.06.25
댓글