참고 공통 소스
4. 공통 소스 (참고용)
import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class TimeUtil { public static long start; public static long end; final static DateTimeFormatter formatter = DateTimeFo..
dennis.tistory.com
Single
- 데이터를 1건만 통지하거나 에러를 통지한다.
- 데이터 통지 자체가 완료를 의미하기 때문에 완료 통지는 하지 않는다.
- 데이터를 1건만 통지하므로 데이터 개수를 요청할 필요가 없다.
- onNext( ), onComplete( )가 없으며 이 둘을 합한 onSuccess( )를 제공한다.
- Single의 대표적인 소비자는 SingleObserver이다.
- 클라이언트의 요청에 대응하는 서버의 응답이 Single을 사용하기 좋은 대표적인 예다.
import com.itvillage.utils.DateUtil;
import com.itvillage.utils.LogType;
import com.itvillage.utils.Logger;
import io.reactivex.Single;
public class Todo {
public static void main(String[] args){
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)
);
Single.just(DateUtil.getNowDate())
.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error)
);
// observable -> Single
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이다.
import com.itvillage.utils.DateUtil;
import com.itvillage.utils.LogType;
import com.itvillage.utils.Logger;
import io.reactivex.Maybe;
public class Todo {
public static void main(String[] args){
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)
);
Maybe.just(DateUtil.getNowDate())
.subscribe(
data -> Logger.log(LogType.ON_SUCCESS, "# 현재 날짜시각: " + data),
error -> Logger.log(LogType.ON_ERROR, error),
() -> Logger.log(LogType.ON_COMPLETE)
);
// Maybe.empty() // -> ON_COMPLETE 호출
// .subscribe(
// data -> Logger.log(LogType.ON_SUCCESS, data),
// error -> Logger.log(LogType.ON_ERROR, error),
// () -> Logger.log(LogType.ON_COMPLETE)
// );
// Single -> Maybe
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이다.
import com.itvillage.utils.LogType;
import com.itvillage.utils.Logger;
import com.itvillage.utils.TimeUtil;
import io.reactivex.Completable;
import io.reactivex.schedulers.Schedulers;
public class Todo {
public static void main(String[] args){
Completable completable = Completable.create(emitter -> {
// 데이터를 발행하는것이 아니라 특정 작업을 수행한 후, 완료를 통지한다.
int sum = 0;
for(int i =0; i < 100; i++){
sum += i;
}
Logger.log(LogType.PRINT, "# 합계: " + sum);
emitter.onComplete();
});
completable.subscribeOn(Schedulers.computation())
.subscribe(
() -> Logger.log(LogType.ON_COMPLETE),
error -> Logger.log(LogType.ON_ERROR, error)
);
TimeUtil.sleep(100L);
}
}
'Android > RX' 카테고리의 다른 글
4. 공통 소스 (참고용) (0) | 2021.01.14 |
---|---|
4. Observable, Flowable (0) | 2021.01.14 |
4. Reactive Streams (0) | 2021.01.14 |
4. 리액티브 프로그래밍이란 ? (0) | 2021.01.11 |