-
안드로이드 비동기 처리 2-3 (Operators : 연산자들)안드로이드 학습/Android 기술면접 대비 2024. 8. 29. 17:41
5가지 Base Classes 학습에 이어서 Operators를 학습해보려고 한다.
Operators 연산자들은 분류 할수 있는 종류(생성, 변환, 필터, 결합 등등) 도 많지만 각 종류별로 포함하는 연산자들이 많다.
그래서 이번에 한번에 정리하기는 힘들어서 몇몇 정류만 골라서 학습해봐야 할 것 같다.
우선 연산자의 분류부터 보자.
1. 연산자 분류
생성 연산자 just(), fromXXX(), create(), interval(), range(), timer(), intervalRange(), defer(), repeat() 변환 연산자 map(), flatMap(), concatMap(), switchMap), groupBy(), scan(), buffer(), window() 필터 연산자 filter(), take(), skip(), distinct() 결합 연산자 zip(), combineLatest(), Merge(), concat() 조건 연산자 amb(), takeUntil(), skipUntil(), all() 에러 처리 연산자 onErrorReturn(), onErrorResumeNext(), retry(), retryUntil() 기타 연산자 subscribe(), subscribeOn(), observeOn(), reduce(), count() 2. 생성 연산자
생성 연산자의 역할은 데이터의 흐름을 만드는 것이다. 즉, Observable (Observable, Single, Maybe 객체 등)을 만드는 것
2.1) just() :
- 지정된 데이터를 순차적으로 방출한다. (최대 10개)
- 주로 간단한 테스트나 짧은 데이터 스트림을 만들 때 사용합니다.
- 예시: Observable.just("A", "B", "C")는 순서대로 "A", "B", "C"를 방출합니다.
2.2) create() :
- emitter를 이용하여 직접 데이터를 발행
- onNext(), onComplete(), onError() 함수를 이용하여 데이터 방출
2.3) interval() :
- 주어진 시간 간격으로 연속적인 값을 방출.
- 주로 타이머와 같이 일정 시간마다 작업을 수행할 때 유용하다.
- 예시: Observable.interval(1, TimeUnit.SECONDS)는 1초 간격으로 값을 방출합니다.
3. 변환 연산자
변환 연산자는 만들어진 데이터 흐름을 원하는 대로 변형해서 사용가능하다. (map, flatmap, concatMap 등등이 있다)
3-1) map() :
- 각 아이템을 변환하여 새로운 Observable로 방출하는 기능을 제공한다.
- 예시: Observable.just(1, 2, 3).map { it * 2 }는 2, 4, 6을 방출합니다.
3-2) flatMap() :
- 각 아이템을 새로운 Observable로 변환하고 이 Observable들이 방출하는 아이템을 합쳐 하나의 Observable로 만듬
- 예시 Observable.just("Hello", "World") .flatMap { Observable.fromArray(it.split("").toTypedArray()) }
3-2 concatMap()
- flatMap()과 비슷하지만, 변환된 Observable이 순차적으로 방출되는 것을 보장합니다.
- 주로 순서가 중요한 비동기 작업에 사용됩니다.
4. 필터 연산자
데이터 필터링 연산자 filter 전달 받은 데이터가 조건에 맞는지 확인한 후, 결과가 true인 데이터만 통지한다
4-1) filter()
- 지정된 조건을 만족하는 아이템들만 방출합니다.
- 조건을 만족하지 않는 아이템은 걸러집니다.
- Observable.just(1, 2, 3, 4, 5) .filter { it % 2 == 0 }.subscribe { println(it) } // 출력: 2, 4
4-2) take()
- 처음 몇 개의 아이템만 방출하고 이후의 아이템들은 무시
- Observable.just(1, 2, 3, 4, 5) .take(3).subscribe { println(it) } // 출력: 1, 2, 3
4-3) debounce()
- 이벤트를 그룹화하여 특정시간이 지난 후 하나의 이벤트만 발생하도록 하는 기술이다.
- 정해놓은 시간안에 데이터가 방출된다면 시간이 초기화 된다.
4-4) Throttle
- 이벤트를 일정한 주기마다 발생하도록 하는 기술이다.
- 초기화 되는 것 없이 정해진 시간이 되면 데이터를 방출한다.
RxJava의 연산자는 종류가 너무 많아서 한번에 학습하기 어렵기 때문에 필요할 때마다 그때그때 학습해봐야 할 것 같다.
'안드로이드 학습 > Android 기술면접 대비' 카테고리의 다른 글
AAC - ViewModel (0) 2024.10.07 LiveData (0) 2024.09.23 안드로이드 비동기 처리 2-2 (RxJava 버전 및 5가지 Base classes) (0) 2024.08.29 안드로이드 Context (0) 2024.08.22 Handler와 Looper (0) 2024.08.20