[UniRx 입문 강좌 5] Operator 활용(2) - 다양한 오퍼레이터 소개
본문 바로가기
프로그래밍/Unity

[UniRx 입문 강좌 5] Operator 활용(2) - 다양한 오퍼레이터 소개

by [아마군] 2019. 10. 14.
반응형

[UniRx 입문 강좌 1] 개념 및 기본 사용법 소개
[UniRx 입문 강좌 2] UniRx 의 핵심, Subject 와 Observable 사용 방법
[UniRx 입문 강좌 3] IObserver 메세지 종류와 스트림의 수명 관리

[UniRx 입문 강좌 4] Operator 활용(1) - Where & Select & SelectMany 사용법
[UniRx 입문 강좌 6] 코루틴(Coroutine) 과 UniRx 연동


지난 강좌에서 UniRx 의 대표적인 오퍼레이터, Where 와 Select (그리고 SelectMany) 에 대해 알아 보았다.

 

이 두가지 오퍼레이터는 UniRx 구문을 10번 쓰면 그 중 7,8 번은 사용해야 할 정도로 자주 사용하는 오퍼레이터 이다.

 

하지만 우리가 원하는 복잡한 처리를 수행하려면 이것만으로는 턱도 없이 부족한 것이 사실이다.

 

실제로 다양한 처리의 자동화를 도와 주는 오퍼레이터 들이 UniRx에 이미 외우기 힘들 정도로 많이 만들어져 있다.

 

이번에는 그 많은 오퍼레이터 들 중에서도 사용빈도가 높은 것들 위주로 간단한 설명과 함께 정리해 보았으며 추후 각 오퍼레이터 별 상세 설명도 추가하겠다.

 


1. 팩토리 메소드

팩토리 메소드는 Observable 클래스에 팩토리 메소드 디자인 패턴 형태로 구현된 static 메소드 들이다.

 

주로 Observable 스트림의 값을 발행하고 컨트롤 하는 오퍼레이터 들이다.

Operator 기능 비고
Observable.Create 직접 Observable 객체를 생성한다.  
Observable.Return 1개의 메세지만 전달한다.  
Observable.Repeat 메세지의 전달을 반복한다.  
Observable.Range 지정된 수치의 메세지를 전달한다.  

Observable.Timer / Observable.Interval

일정 간격을 두고 메세지를 전달한다.

Timer 는 실행 후 몇 초 이후 발생

Interval 은 실행 후 몇 초 마다 발생

Observable.Empty OnCompleted를 즉시 전달한다.  
Observable.FromEvent UnityEvent 를 Observable 로 변환한다.  

Observable.EveryUpdate / Observable.FixedEveryUpdate

그외 기타 등등...

Update 이벤트 처럼 매프레임 메세지를 전달한다.

OnCompleted 가 발행 되지 않으므로 수명 관리에 주의가 필요하다. 평상시에는  UpdateAsObservable 사용을 추천


2. 메세지 필터

메세지 필터는 스트림에 흐르는 메세지 들 중 원하는 메세지 들만 걸러내 주는 필터의 기능을 하는 오퍼레이터 들이다.

 

Operator 기능 비고
Where 조건식이 true 인 것만 통과 시킨다. 다른 언어에서는 filter 의 기능
Distinct 중복된 메세지 들은 제거한다.  
DistinctUntilChanged 값이 변화했을 경우만 통과 시킨다.  
Throttle / ThrtottleFrame 지정한 간격 내에 들어온 메세지 중 마지막 메세지만 통과 시킨다. Throttle 과 ThrottleFrame 의 차이는 지정 조건이 시간인지 프레임인지
First / FirstOrDefault 가장 먼저 발생한 메세지만 전달하고 Observable을 완료 시킨다.  
Take 지정한 갯수 만큼의 메세지만 전달.  
TakeUntil 인자로 지정한 스트림에 지정한 메세지가 올 때까지 계속 메세지를 전달한다.  
TakeWhile 조건이 true 인 동안 계속 메세지를 전달한다.  
Skip 지정한 갯수만큼 메세지를 스킵한다.  
SkipUntil 인자로 지정한 스트림에 지정한 메세지가 올 때까지 계속 메세지를 스킵한다.  
SkipWhile 조건이 true 인 동안 계속 메세지를 스킵한다.  

3. Observable 합성

Observable 의 스트림에 흐르는 메세지를 합성해 주는 오퍼레이터 들이다.

 

Operator 기능 비고
Amb 복수의 Observable 중에서 가장 빨리 메세지가 온 Observable 의 데이터를 선택한다.  
Zip 복수의 Observable 에 흐르는 메세지들을 합성한다. 각 스트림 별로 1개씩 메세지를 뽑아서 합성한다.
ZipLatest 각 스트림 별로 1개씩 최신의 메세지만을 뽑아서 합성한다.
CombineLatest 각 스트림 별로 1개씩 최신의 메세지만을 합성하되, 사용된 메세지는 다음 메세지가 도달하기 전까지 버리지 않고 재활용 된다.
WithLatestFrom 2개의 Observable 중 하나를 주축으로 다른 Observable 의 최신값을 합성한다.  
Merge 복수의 Observable 을 1개의 스트림으로 합성한다.  
Concat 하나의 Observable에 OnCompleted 가 발생하여 종료되면 다른 Observable 로 대체한다.  
SelectMany 별도의 Observable을 생성하여 다른 Observable 을 대체한다. 다른 언어에서는 FlatMap 의 기능
Observable.Catch 복수의 Observable 을 성공할 때까지 차례로 실행한다.  Catch(IEnumerable<IObservable<T>>)을 사용하여 차례대로 성공할 때까지 1개씩 실행

4. Observable 변환

Observable 을 다른 형태로 변환시키는 Operator 들이다.

 

Operator 기능 비고
ToReactiveProperty Observable 을 ReactiveProperty 로 변화시킨다.  
ToReadOnlyReactiveProperty Observable 을 ReadOnlyReactiveProperty 로 변화시킨다.  
ToYieldInstruction Observable을 코루틴 으로 변환 시킨다 OnCompleted 가 올때까지 코루틴 내에서 대기 시킬 수 있다.

 


5. 메세지 합성과 연산

Observable 상의 메세지의  합성과 연산을 담당하는 Operator 들이다.

 

Operator 기능 비고
Scan 현재 메세지의 값과 이전 메세지 결과를 이용해 누적 처리를 반복한다. LINQ 에서 Aggregate 의 기능ㅇ
Buffer 메세지를 지정한 갯수만큼 묶어서 전달한다.  

6. 메세지 변환

Observable 상의 메세지를 변환시키는 Operator 들이다.

 

Operator 기능 비고
Select 현재 스트림에서 처리하는 메세지를 다른 메세지로 대체한다. 다른 언어에서 map 의 기능
Cast<T> 메세지의 형변환  
TimeInterval 이전 메세지로부터 경과시간을 부여한다.  
TimeStamp 메세지에 타임 스탬프를 추가한다.  
AsUnitObservable 메세지를 Unit 형으로 변환한다. Select(_=>Unit.Default) 와 동일

7. Observable 완료시 처리

Observable 에 OnCompleted 전달 시 작동하는 Operator 들이다.

 

Operator 기능 비고
Repeat OnCompleted 전달 시 다시 한번 Subscribe 를 대기한다. 무한 루프를 주의해야 한다.
RepeatUntilDisable OnCompleted 전달 시 다시 한번 Subscribe 를 대기하지만 지정한 GameObject 가 Disable 되면 Repeat 가 중지된다. Repeat 보다 안전하다.
RepeatUntilDestory OnCompleted 전달 시 다시 한번 Subscribe 를 대기하지만 지정한 GameObject 가 Destory 되면 Repeat 가 중지된다. Repeat 보다 안전하다.
Finally OnCompleted 나 OnError 전달 시 처리  

[UniRx 입문 강좌 6] 코루틴(Coroutine) 과 UniRx 연동

 

 

[UniRx 입문 강좌 6] 코루틴(Coroutine) 과 UniRx 연동

[UniRx 입문 강좌 1] 개념 및 기본 사용법 소개 [UniRx 입문 강좌 2] UniRx 의 핵심, Subject 와 Observable 사용 방법 [UniRx 입문 강좌 3] IObserver 메세지 종류와 스트림의 수명 관리 [UniRx 입문 강좌 4] Op..

skuld2000.tistory.com

 

반응형

댓글