JuHyang

Rx Just vs Create 본문

Android/RxAndroid

Rx Just vs Create

Ju_Hyang 2023. 2. 5. 17:13

Rx 에서 데이터를 발급하는 방법은 여러가지가 존재합니다.

그 중 가장 흔히 사용할 수 있는 데이터 발급 함수에는 Just 와 Create 가 있습니다.

Single.just(Foo().bar())

Single.create { emitter ->
	emitter.onSuccess(Foo().bar())
}

두 함수는 비슷해 보이지만 다른 동작을 하고 있습니다.

SingleJust 의 내부 구현체와 SingleCreate 의 내부 구현체를 들여다 보면 차이를 알 수 있습니다.

// SingleJust
public final class SingleJust<T> extends Single<T> {

    final T value;

    public SingleJust(T value) {
        this.value = value;
    }
}
// SingleCreate
public final class SingleCreate<T> extends Single<T> {

    final SingleOnSubscribe<T> source;

    public SingleCreate(SingleOnSubscribe<T> source) {
        this.source = source;
    }
}

둘의 차이를 보면 SingleJust 는 value 를 가지고 있고, SingleCreate 는 Source 를 가지고 있는것을 알 수 있습니다.

따라서 Single.just 는 값을 넘겨주는 형태, SingleCreate 는 함수를 넘겨주는 형태임을 알 수 있습니다.

Single.just(Foo().bar()) // 이미 계산되어있는 값을 Single 그대로 넘기는 형태

Single.create { emitter -> // 함수를 넘기면서 subscribe 에서 함수를 실행시키는 형태
	emitter.onSuccess(Foo().bar())
}

만약 Foo().bar() 가 두 Single 이 반환되기 직전에 끝나는 함수에 영향을 받는다면, 결과값이 달라질 수 있습니다.

두 함수의 차이점에 유의해서 사용해야 합니다.

Rx 는 멀고도 험하고 어렵습니다.. 항상 공부해야겠네요 😂

'Android > RxAndroid' 카테고리의 다른 글

RxAndroid  (0) 2020.05.18
RxKotlin  (0) 2020.05.18
RxJava  (0) 2020.01.14