RxJava - Single

thsamajiki·2022년 11월 9일
0

RxJava

목록 보기
4/4

Single

RxJava는 Observable과 유사한 “Single”을 제공한다.

Single은 Observable의 변형된 형태이다. Observable과 비슷하지만, 여러 개의 데이터를 발행할 수 있는 Observable과 달리 Single은 한 개의 데이터(혹은 에러)만을 발행한다. 이전 포스트에서 말한 것처럼 Observable은 3가지 알림을 보내는 반면, Single은 onSuccess, onError 2가지의 알림을 보낸다.

onSuccess : 데이터 하나를 발행함과 동시에 종료
onError : 에러가 발생했음을 알림

Marble Diagram을 보면 Single은 데이터 하나를 발행함과 동시에 종료한다. 데이터 발행(onNext)과 완료(onCompleted)를 각각 알렸던 Observable과 달리 Single은 데이터 발행의 완료를 따로 알리지 않는다는 것이 특징이다.

따라서 Single은 결과를 단일값으로 가져오는 네트워크 통신 등에 유용하게 사용할 수 있다.

예제

Single을 생성하는 예제를 살펴보자. 다른 연산자를 사용하는 방법과 Marble Diagram은 여기서 익히자.

가장 간단한 생성 방법은 정적 팩토리 함수(생성 연산자) just를 사용하는 것이다. Observable의 just를 사용할 때와 같은 방법으로 사용하면 된다.

// 1. Single.just() 사용
Single.just(1)
      .subscribe(System.out::println);

또 다른 생성 연산자인 create를 사용할 수도 있다.

// 2. Single.create() 사용
Single<Integer> createdSingle = Single.create(new SingleOnSubscribe<Integer>() {
    @Override
    public void subscribe(@NonNull SingleEmitter<Integer> emitter) throws Throwable {
        emitter.onSuccess(1);
    }
});
createdSingle.subscribe(System.out::println);

SingleEmitter를 이용해 데이터를 발행하거나(onSuccess), 에러를 발생시킬 수 있다(onError).


Observable을 Single로 변환할 수도 있다. 단, 여러 데이터를 발행하는 Observable을 Single로 변환하면 컴파일 에러가 발생한다는 사실에 주의하자.

// 3. fromObservable() 사용
Observable<Integer> observable = Observable.just(1);
Single.fromObservable(observable)
        .subscribe(System.out::println);

// 4. single() 사용
Observable.just(1)
        .single(0) //default value
        .subscribe(System.out::println);
profile
안드로이드 개발자

0개의 댓글