-
Single, Maybe, CompletableBackEnd/RxJava 2023. 7. 2. 05:30반응형
Single
- 데이터를 1건만 통지하거나 에러를 통지합니다.
- 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않습니다.
- 데이터를 1건만 통지하므로 데이터 개수를 요청할 필요가 없습니다.
- onNext(), onComplete()가 없으며, 이 둘을 합한 onSuccess()를 제공합니다.
- Single의 대표적인 소비자는 SingleObserver입니다.
- 클라이언트의 요청에 대응하는 서버의 응답이 Single을 사용하기 좋은 대표적인 예입니다.
package com.itvillage.chapter03.chapter0303; import com.itvillage.utils.DateUtil; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import io.reactivex.Single; import io.reactivex.SingleEmitter; import io.reactivex.SingleObserver; import io.reactivex.SingleOnSubscribe; import io.reactivex.disposables.Disposable; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.logging.SimpleFormatter; /** * Single 클래스를 사용하여 현재 날짜와 시각을 통지하는 예제 */ public class SingleCreateExample { public static void main(String[] args){ Single<String> single = Single.create(new SingleOnSubscribe<String>() { @Override public void subscribe(SingleEmitter<String> emitter) throws Exception { emitter.onSuccess(DateUtil.getNowDate()); } }); 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); } }); } }
Maybe
- 데이터를 1건만 통지하거나 1건도 통지하지 않고 완료 또는 에러를 통지합니다.
- 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않습니다.
- 단, 데이터를 1건도 통지하지 않고 처리가 종료될 경우에는 완료 통지를 합니다.
- Maybe의 대표적인 소비자는 MaybeObserver 입니다.
package com.itvillage.chapter03.chapter0303; import com.itvillage.utils.DateUtil; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import io.reactivex.Maybe; import io.reactivex.MaybeEmitter; import io.reactivex.MaybeObserver; import io.reactivex.MaybeOnSubscribe; import io.reactivex.disposables.Disposable; /** * Maybe 클래스를 이용하여 데이터를 통지하는 예제 */ public class MaybeCreateExample { public static void main(String[] args){ 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); } }); } }
Completable
- 데이터 생산자이지만 데이터를 1건도 통지하지 않고 완료 또는 에러를 통지합니다.
- 데이터 통지의 역할 대신에 Completable 내에서 특정 작업을 수행한 후 해당 처리가 끝났음을 통지하는 역할을 합니다.
- Completable의 대표적인 소비자는 CompletableObserver 입니다.
package com.itvillage.chapter03.chapter0303; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import com.itvillage.utils.TimeUtil; import io.reactivex.Completable; import io.reactivex.CompletableEmitter; import io.reactivex.CompletableObserver; import io.reactivex.CompletableOnSubscribe; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Completable 을 사용하여 어떤 작업을 수행한 후, 완료를 통지하는 예제 */ public class CompletableCreateExample { public static void main(String[] args) throws InterruptedException { Completable completable = Completable.create(new CompletableOnSubscribe() { @Override public void subscribe(CompletableEmitter emitter) throws Exception { // 데이터를 통지하는것이 아니라 특정 작업을 수행한 후, 완료를 통지한다. int sum = 0; for(int i =0; i < 100; i++){ sum += i; } Logger.log(LogType.PRINT, "# 합계: " + sum); emitter.onComplete(); } }); completable.subscribeOn(Schedulers.computation()) .subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable disposable) { // 아무것도 하지 않음 } @Override public void onComplete() { Logger.log(LogType.ON_COMPLETE); } @Override public void onError(Throwable error) { Logger.log(LogType.ON_ERROR, error); } }); TimeUtil.sleep(100L); } }
[참고 자료]
반응형'BackEnd > RxJava' 카테고리의 다른 글
필터링 연산자 (0) 2023.07.06 Flowable/Observable 생성 연산자 (0) 2023.07.02 Flowable과 Observable (0) 2023.07.02 Reactive Streams (0) 2023.07.01 RxJava 프로젝트 환경 구축 (0) 2023.07.01