728x90
반응형
대량의 데이터가 아닌 최대 1건 이하만 데이터를 통지하는 생산자들 이다.
Single
- 데이터를 1건만 통지하거나 에러를 통지한다.
- 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않는다.
- 데이터를 1건만 통지하므로 데이터 개수를 요청할 필요가 없다.
- onNext( ), onComplete( )가 없으며 이 둘을 합한 onSuccess( )를 제공한다.
- Single의 대표적인 소비자는 SingleObserver이다.
- 클라이언트의 요청에 대응하는 서버의 응답이 Single을 사용하기 좋은 대표적인 예다.
Single 클래스를 사용하여 현재 날짜와 시각을 통지하는 예제
create 연산자 사용 예제
/*** SingleOnSubscribe 생산자 */
Single<String> single = Single.create(new SingleOnSubscribe<String>() {
@Override
public void subscribe(SingleEmitter<String> emitter) throws Exception {
emitter.onSuccess(DateUtil.getNowDate());
}
});
/*** SingleObserver 소비자 */
single.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable disposable) {
// 아무것도 하지 않음.
}
@Override
public void onSuccess(String data) {
Logger.log(LogType.ON_SUCCESS, "# 날짜시각: " + data);
}
@Override
public void onError(Throwable error) {
Logger.log(LogType.ON_ERROR, error);
}
});
수행 결과
람다 함수 사용 예제
Single<String> single = Single.create(
emitter -> emitter.onSuccess(DateUtil.getNowDate()));
single.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error)
);
수행 결과
just() 함수 사용 예제
Single.just(DateUtil.getNowDate())
.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error)
);
수행 결과
Observable<String> observable = Observable.just(DateUtil.getNowDate());
Single.fromObservable(observable)
.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, " # 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error)
);
Maybe
- 데이터를 1건만 통지하거나 1건도 통지하지 않고 완료 또는 에러를 통지한다.
- 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않는다.
- 단, 데이터를 1건도 통지하지 않고 처리가 종료될 경우에는 완료 통지를 한다.
- Maybe의 대표적인 소비자는 MaybeObserver이다.
Maybe 클래스를 이용하여 데이터를 통지하는 예제
Maybe<String> maybe = Maybe.create(new MaybeOnSubscribe<String>() {
@Override
public void subscribe(MaybeEmitter<String> emitter) throws Exception {
// emitter.onSuccess(DateUtil.getNowDate());
emitter.onComplete();
}
});
maybe.subscribe(new MaybeObserver<String>() {
@Override
public void onSubscribe(Disposable disposable) {
// 아무것도 하지 않음.
}
@Override
public void onSuccess(String data) {
Logger.log(LogType.ON_SUCCESS, "# 현재 날짜시각: " + data);
}
@Override
public void onError(Throwable error) {
Logger.log(LogType.ON_ERROR, error);
}
@Override
public void onComplete() {
Logger.log(LogType.ON_COMPLETE);
}
});
람다 함수로 표현한 예제
Maybe<String> maybe = Maybe.create(emitter -> {
emitter.onSuccess(DateUtil.getNowDate());
// emitter.onComplete();
});
maybe.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 현재 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error),
() -> Logger.log(LogType.ON_COMPLETE)
);
just() 연산자를
Single<String> single = Single.just(DateUtil.getNowDate());
Maybe.fromSingle(single)
.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 현재 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error),
() -> Logger.log(LogType.ON_COMPLETE)
);
Completable
- 데이터 생산자이지만 데이터를 1건도 통지하지 않고 완료 또는 에러를 통지한다.
- 데이터 통지의 역할 대신에 Completable 내에서 특정 작업을 수행한 후, 해당 처리가 끝났음을 통지하는 역할을 한다.
- Completable의 대표적인 소비자는 CompletableObserver이다.
728x90
반응형
'Language > Reactive' 카테고리의 다른 글
RxAndroid (0) | 2021.08.21 |
---|---|
[리엑티브 생산자 Publisher 2] Flowable & Observable (feat. 배압전략) (0) | 2021.06.04 |
[리엑티브 생산자 Publisher 1] Cold Publisher & Hot Publisher (0) | 2021.06.04 |
Processor와 Subject (0) | 2021.04.25 |
RxJava로 기존 Android code 개선하기 (0) | 2021.04.25 |