혼자 있고 싶네요. 모두 나가주세요.
006. RxJAVA 연산자 :: Observable 생성 본문
RxJAVA의 연산자
거의 모든 연산자들이 Observable을 return하기 때문에 return 값을 그대로 받아서 연산자를 이어나가는 연산자 체인을 가능하게 한다. 메서드 체인을 제공하는 빌더 패턴과는 다르게 Observable의 연산자 체인은 호출 순서
에 따라 결과가 달라진다고 한다.
몇 가지의 연산자를 통해 감을 잡아보도록 하자.
Observable 생성 연산자
create
create
연산자는 직접적인 코드를 통해 Observable을 만들 수 있게 해준다. 이 연산자를 Observer를 매개변수로 삼는 함수로 넘길 수 있다.이 함수를 사용하여 Observer의 onNext
, onError
, onCompleted
메서드를 적절히 사용함으로서 Observable처럼 행동하게 해보자.
Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber<? super Integer> observer) {
try {
if (!observer.isUnsubscribed()) {
for (int i = 1; i < 5; i++) {
observer.onNext(i);
}
observer.onCompleted();
}
} catch (Exception e) {
observer.onError(e);
}
}
} ).subscribe(new Subscriber() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.
defer
observer가 subscribe를 하기 전까지 Observable을 만들지 않는다. 그리고 새로운 Observable을 각각의 Oberver에개 만들어준다.
이러한 특성은 특정 상황에서, 계속 기다리다가 Observable을 생성하는 것이 Observable이 가장 최신의 데이터를 가지고 있음을 보장해줄 수 있다.
empty
아이템을 뱉지는 않지만 onCompleted
메서드를 호출하며 정상적으로 종료되는 Observable을 만든다. 테스트 목적으로 쓰이곤 한다.
never
아이템을 뱉지는 않지만 종료되지 않는 Observable을 만든다. 테스트 목적으로 쓰이곤 한다.
error
아이템을 뱉지는 않고 종료될 때 onError
메서드를 호출하는 Observable을 만든다. 테스트 목적으로 쓰이곤 한다. ReactiveX에서 말하는 Throw 와 같으며, RxJava에서는 다음과 같이 쓰인다. error(종료하고 싶은 Observable)
just
특정한 아이템을 뱉는 Observable을 만든다. 아이템을 그 아이템을 결과로 뱉는 Observable로 변환하는 것이라고 한다. From
과 비슷하지만 Just
는 단순히 데이터를 뱉는데에 반해 From
은 그 과정에서 기존의 데이터가 조작되는 듯 하다.
주의할 것은 null
을 넘겨주게 되면 빈 Observable을 반환하는 것이 아니라 null
을 반환한다고 한다.
repeat
특정한 아이템을 여러번 뱉는 Observable을 만든다. 아이템을 반복적으로 뱉어내며, repeat(2)
와 같이 횟수를 조절 할 수 있는 것 같다. Scheduler
도 매개변수로 넘겨 줄 수 있다고 하는데, 잘 모르므로 패스하도록 하자.
start
함수의 실행 결과를 뱉어내는 Observable을 만든다.Start
연산자로 그룹지어진 연산자들은 그것들이 Observable처럼 행동하게 하여 Observable 체인에 연속적으로 사용 가능 하도록 한다.
'타닥타닥 > RxJava' 카테고리의 다른 글
005. Connectable Observable (0) | 2017.07.05 |
---|---|
004. RxJava Subject란? (0) | 2017.07.05 |
003. Observable : Hot, Cold? (0) | 2017.07.05 |
002. RxAndroid 준비하기 (0) | 2017.07.05 |
001. Reactive Programming/RxJava 란? (0) | 2017.07.05 |