본문 바로가기
Rx

Observable -4 (onCreate함수,람다식,자바8메소드레퍼런스,Consumer<T>)

by 봄석 2018. 12. 23.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간


http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=

Observable의 팩토리 함수 구분

팩토리함수 

함수 

RxJava 1.x의 기본 팩토리 함수 

create(),just(),from() 

RxJava 2.x의 기본 팩토리 함수  

fromArray(),fromlterable(),fromCallable(),fromFuture(),

fromPublisher() 

기타 팩토리 함수 

interval(),range(),timer(),defer() 


onCreate()함수

just() 함수는 데이터를 인자로 넣으면 자동으로 알림 이벤트가 발생하지만 create() 함수는 

onNext, onComplete, onError 같은 알림을 개발자가 직접 호출해야 합니다.

그래서 create()는 라이브러리가 무언가 해준다는 느낌이 아닌 개발자가 무언가를 직접하는 

느낌이 강한 함수입니다.




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

구독자에게 데이터를 발행하려면 onNext() 함수를 호출해야 하며 모든 데이터를 발행한 후 반드시 onComplete() 함수를 호출해야 한다.


create()함수의 원형

Observable<T> create(ObservableOnSubscribe<T> source)


ObservableOnSubscribe 인터페이스

public interface ObservableOnSubscribe<T>{

void subscribe(ObservableEmitter<T> e) throws Exception;

}




Observable.create()를 사용할때 주의사항

RxJava의 javadoc 에 따르면 create()는 RxJava에 익숙한 사용자만 활용하도록 권고합니다.

사실 create()를 사용하지 않고 다른 팩토리 함수를 활용하면 같은효과를 낼 수 있기 때문에,

만약 그래도 사용해야한다면 아래 사항을 확인해야 합니다.


1) Observable이 구독해지(dispose)되었을 때 등록된 콜백을 모두 해제해야 합니다.

그렇지않으면 잠재적으로 메모리누수(memory leak)가 발생합니다.

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

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

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




Java 8 람다 표현식참고 

참고 - https://jdm.kr/blog/181

참고 - https://skyoo2003.github.io/post/2016/11/09/java8-lambda-expression



Java 8 메소드 레퍼런스

System.out::println 은 data->System.out.print(data)를 줄인것이다.


메소드레퍼런스 사용을 고려할때 우선순위

1) 메소드 레퍼런스로 축약할 수 있는지 확인.

2) 그다음 람다 표현식을 활용할 수 있는지 확인

3) 1~2를 활용할 수 없으면 익명 객체나 맴버 변수로 표현.


RxJava 2의 Consumer<T>와 자바 8의 Consumer<T>

자바8에는 다음과 같은 함수형 인터페이스를 제공합니다.

- java.util.function.Consumer

- java.util.function.Predication

- java.util.function.Function


Rxjava 2에서는 같은 기능을 하는 함수형 인터페이스를 제공한다

- io.reactivex.function.Consumer

- io.reactivex.function.Predication

- io.reactivex.function.Function








댓글