JEP's Diary

리액티브 연산자1 본문

Development/Reactive

리액티브 연산자1

지으니88 2018. 7. 28. 19:25

리액티브 연산자1

리액티브 연산자는 부수효과가 없는 순수함수이다.



1. 리액티브 연산자 분류

: 생성 연산자

- Observable, Single 클래스 등으로 데이터의 흐름을 만들어내는 함수이다.

create(), just(), fromArray(), interval(), range(), timer(), defer() 등

: 변환 연산자

- 어떤 입력을 받아서 원하는 출력 결과를 내는 함수이다. 

map(), flatMap()등

: 필터 연산자

- 입력 데이터 중에서 원하는 데이머나 걸러내는 함수이다.

filter(), first(), take()등

: 합성 연산자

- 생성, 변환, 필터 연산자가 주로 단일 Observable을 다룬다면 합성 연산자는 여러 Observable을 조합하는 역할을 하는 함수이다. 

: 오류 처리 연산자 

- onErrorReturn(), onErrorResumeNext(), retry()등 

: 유틸리티 연산자

- subscribeOn(), onbserveOn()등 비동기프로그래밍을 지원한다.

: 조건 연산자

- Observable의 흐름을 제어하는 역할을 한다.

: 수학과 집합형 연산자

- 수학 함수와 연관있는 연산자이다.

: 배압 연산자

- 배압 이슈에 대응하는 연산자이다.


2.map()함수

: 입력값을 어떤 함수에 넣어서 원하는 값으로 변환하는 함수이다. String->String, String->Integer나 다른 객체로 변환 할 수 있다.

: map()함수의원형

pubic final <R> Observable<R> map(Function<? super T,? extends R>mapper)


3.flatMap()함수

: map() 함수를 좀 더 발전시킨 함수이다. map()함수는 원하는 입력값을 어떤 함수에 넣어서 변환 할 수 있는 일대일 함수이다. flatMap()함수는 똑같이 함수에 넣더라도 결과가 Observable로 나온다. 즉 map()함수가 일대일 함수라면 flapMap()함수는 일대다 혹은 일대일 Observable함수이다.


4.filter()함수

: Observable에서 원하는 데이터만 걸러내는 역할을 한다. 필요없는 데이터는 제거하고 오직 관심 있는 데이터만 filter()함수를 통과하게된다. 

: first(default)함수 : Observable의 첫번째 값을 필터함. 만약 값없이 완료되면 대신 기본값을 리턴함

: last(default)함수 : Observable의 마지막 값을 필터함. 만약 값없이 완료되면 대신 기본값을 리턴함

: take(N)함수 : 최초 N개 값만 가져옴

: takeLast(N)함수 : 마지막 N개 값만 필터함

: skip(N)함수 : 최초 N개 값을 건너뜀

: skipLast(N)함수 : 마지막 N개 값을 건너뜀


5.reduce()함수

: 발행한 데이터를 모두 사용하여 어떤 최종 결과 데이터를 합성할 때 활용한다. map()/ filter()/ recude() 패턴을 이루는 마지막 필수 함수이다.

: reduce() 함수를 호출하면 인자로 넘긴 람다 표현식에 의해 결과 없이 완료될 수도 있다. 따라서 Observable이 아니라 Maybe 객체로 리턴된다.

: redece()함수의 원형

public final Maybe<T> reduce(BiFunction<T,T,T> reducer)



* RxJava의 람다 표현식은 세가지 제네릭 함수형 인터페이스 중 하나로 나타낸다.

: Predicate<T>

- boolean test(T t) 메서드를 포함한다. t값을 받아서 참이나 거짓을 반환한다.

: Consumer<T>

- void accept(T t) 메서드를 포함한다. t값을 받아서 처리한다. 반환값을 없다.

: Function<T, R>

- R apply(T t) 메서드를 포함한다. t값을 받아서 결과를 반환한다.


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

'Development > Reactive' 카테고리의 다른 글

스케줄러  (0) 2018.07.28
리액티브 연산자2  (0) 2018.07.28
Observable 알고가기  (0) 2018.07.25
리액티브 프로그래밍 개념  (0) 2018.07.24