제이슨의 개발이야기

RxJava 함수에 대해서(create())! 본문

Rx

RxJava 함수에 대해서(create())!

제이쓰은 2021. 2. 25. 14:17
728x90
반응형

create() 함수

just() 함수는 데이터를 인자로 넣으면 자동으로 알림 이벤트가 발생하지만 create() 함수는 onNext , onComplete, onError 같은 알림을 개발자가 직접 호출해야 합니다. 그래서 create() 는 라이브러리가 무언가를 해준다기보다 개발자가 무언가를 직접 하는 느낌이 강한 함수 입니다

create() 함수의 마블 다이어그램

ex)

Observable<Integer> source = Observable.create(

(ObservableEmitter<Integer> emitter) -> {

            emitter.onNext(100);

            emitter.onNext(200);

            emitter.onNext(300);

            emitter.onComplete();

 });

source.subscribe(System.out::println);

 

결과 화면 : 

100

200

300

 

create 역시 subscribe() 함수를 호출 하지 않으면 아무것도 출력하지 않는다 그 이유는 source 변수는 차가운 Observable 이기 때문입니다 그래서 꼭꼭 subscribe() 함수를 호출 해야합니다!

 

Observable.create() 를 사용할 때는 주의 해야 합니다

 RxJava 의 javadoc 에 따르면 create()는 RxJava에 익숙한 사용자만 권고 합니다 다른 팩토리 함수를 활용하면 같은 효과를 낼 수 있기 때문입니다 만약 그래도 사용하게 된다면 아래 사항을 확인해야 합니다

 

1. Observable이 구독해지(dispose)되었을 때 등록된 콜백을 모두 해제해야 합니다. 그렇지 않으면 잠재적으로 메모리 누수가 발생합니다

2.구독자가 구독하는 동안에만 onNext와 onComplete 이밴트를 호출해야 합니다 

3.에러가 발생했을 떄는 오직 onError 이벤트만 에러를 전달해야 합니다

4. 배압(back pressure)을 직접 처리해야 합니다


 

728x90
반응형