안드로이드 개발 팁 블로그

3. Operators 이해하기 - 생성 본문

Rxandroid

3. Operators 이해하기 - 생성

tiii 2016. 3. 2. 11:42
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



Rx프로그래밍의 장점은 데이터 흐름대로 코딩이 가능합니다.
체이닝이라는 통해 우리가 원하는 작업대로 데이타를 가공하고 처리 할 수 있습니다.
이를 도와주는 것 중 정해진 일을 처리하는 Observable들이 있습니다. 우리는 이것을 Operator라고 부르는데요.
오늘은 이 Operator의 종류와 하는 일에 대해서 알아보겠습니다.

공식 문서를 보면 아래와 같은 마블 다이어그램을 확인 하실 수 있는데 각 아이템에 대한 설명은 다음과 같습니다.


Operator를 카테고리 별로 나눠보면 다음과 같습니다.

생성, 변형, 분류, 조합, 에러처리, 유틸리티, 조건과 상태(boolean), 수학과 집계, backpressure, connectable, 변환
한번에 다둘려고 했으나 양이 너무 많아 파트를 나눠서 포스팅 합니다.

이번 포스팅은 옵져버블의 생성에 관련된 오퍼레이터 입니다.


생성 옵저버블

새로운 Observable을 생성하는 Operator 입니다.

  • Create — 수동으로 옵져버 메소드 호출하여 새로운 옵저버블을 생성합니다.
    Create
    다음과 같이 사용하시면 됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<super String> subscriber) {
            try {
                subscriber.onNext("Hello_Create");
                subscriber.onCompleted();
            } catch (Exception e) {
                subscriber.onError(e);
            }
        }
    })
    .compose(mMainView.ActivityLifecycleProvider().bindToLifecycle())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(s -> {
                Log.d(TAG, s);
                mMainView.TextChange(s);
            },
            throwable -> throwable.printStackTrace(),
            () -> {
                Log.d(TAG, "onComplete");
                LogTextView();
            }
    );
    cs

  • Defer — 구독하기 전까지 옵저버블을 생성하지 않습니다. 그리고 각각의 옵져버에게 매번 새로운 옵저버블을 생성합니다.
    다른 생성 오퍼레이터와 다른 점이 뭔지 애매했었는데 데이타스트림이 메모리에 할당되는 타이밍이 다른 것이 였습니다.
    다른 오퍼레이터들은 오퍼레이터를 선언하는 순간 메모리에 할당 되지만 defer는 subscribe가 호출 될 때에 할당 된다고 합니다.
    Defer
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Observable.defer(() -> {
        return SomethingLongTask(); //return Observable<String>
    })
    .compose(mMainView.ActivityLifecycleProvider().bindToLifecycle());
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(s -> {
                Log.d(TAG, s);
                mMainView.TextChange(s);
            },
            throwable -> throwable.printStackTrace(),
            () -> {
                Log.d(TAG, "onComplete");
                LogTextView();
            }
    );
    cs

  • Empty/Never/Throw — 매우 정확하고 제한적인 행동의 Observable을 생성합니다.
    Empty - 방출하는 아이템이 없고 정상적으로 종료되는 옵저버블을 생성합니다.
    Empty
    Never - 방출하는 아이템이 없고 종료되지 않는 옵저버블을 생성합니다.
    Never
    Throw - 방출하는 아이템이 없고 에러를 발생하여 종료되는 옵저버블을 생성합니다.
    Throw
  • From — 배열이나 Iterable의 요소를 순차적으로 방출 시키는 Observable으로 변환합니다.
    에서

  • Interval — 특정한 시간 간격으로 아이템을 방출하는 Observable을 생성합니다.
    일정시간 마다 반복적인 작업이 필요할 때 사용하면 좋을 것 같네요.
    Interval

  • Just — 오브젝트나 오브젝트셋을 바로 방출하는 Oservable으로 변환 합니다.
    만약에 아무것도 하지 않는 옵저버블을 만들기 위해 null 을 넣는다면 null을 방출하는 옵저버블이 만들어 집니다.
    아무것도 하지 않은 옵저버블을 원하신다면 empty를 사용하시면 됩니다.
    Just

  • Range — 정수의 순차적인 범위를 가지고 있는 Observable을 생성합니다.
    Interval과 비슷하지만 반복횟수의 제한이 있습니다. m개 만큼의 반복합니다.
    Range

  • Repeat — 일정 횟수를 반복하는 Observable을 생성합니다.
    이 오퍼레이터는 단독으로 사용되지 않고 다른 오퍼레이터 뒤에 붙여서 사용되며 .Repeat(n) 바로 앞 오퍼레이터를 일정횟수 만큼 반복합니다.

    Repeat

  • Start — 함수의 결과 값을 방출하는 Observable을 생성합니다.
    https://github.com/ReactiveX/RxJavaAsyncUtil을 디펜던시에 추가해야 사용 할 수 있다.
    추가한 디펜던시에서 사용할 수 있는 오퍼레이터는 아래의 링크에서확인이 가능 합니다.
    https://github.com/ReactiveX/RxJava/wiki/Async-Operators
    Start




  • Timer — 일정 시간의 딜레이 이후에 단일 항목을 방출하는 Observable을 생성합니다.
    Timer




Operator를 인터렉티브한 마블 다이어그램으로 확인이 가능한 http://rxmarbles.com/에서 자세히 확인해 보세요.

'Rxandroid' 카테고리의 다른 글

Connectable Observable Operators  (0) 2016.05.26
2. 스케쥴러 이해하기  (1) 2016.02.23
1-1. RxAndroid MVP Sample  (1) 2016.02.19
1. RxAndroid를 적용해보고 HelloWorld를 찍어보자.  (2) 2016.02.18
0. RxAndroid의 시작  (0) 2016.02.17
Comments