일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Jetpack
- dagger2
- Di
- compose
- Kotlin
- 자료구조
- git
- 깃
- 제한함수
- 공격적 프로그래밍
- 유닛테스트
- 컴포즈
- 디자인패턴
- 안드로이드
- Observable
- 단위테스트
- Room
- 파이썬
- ViewModel
- Python
- MVVM
- rxjava
- 코딩테스트
- UnitTest
- Android
- 안드로이드 디자인패턴
- 코틀린
- 테스트의 장점
- 안정성
- mock
- Today
- Total
세상을 바꾸는 개발자
[RxJava] Observable로 변환하기(fromArray, fromIterable, fromFuture, fromPublisher, fromCallable) 본문
[RxJava] Observable로 변환하기(fromArray, fromIterable, fromFuture, fromPublisher, fromCallable)
헬창코딩 2021. 8. 23. 22:39안녕하세요~ 헬창코딩입니다.
이번에는 Rxjava에서 이미 참조할 수 있는 배열 및 리스트 등의 자료구조나 Future, Callable 또는 Publisher가 있다면
from으로 시작하는 연산자를 통해 Observable로 변환하는 작업을 해보도록 하겠습니다.
from과 관련된 메서드입니다.
fromArray()
-> 배열을 ObservableSource로 변환하여 아이템을 순차적으로 발행합니다.
fromIterable()
-> ArrayList, HashSet처럼 Iterable을 구현한 모든 객체를 ObservableSource로 변환하여 아이템을 순차적으로 발행합니다.
fromFuture()
-> Future 인터페이스를 지원하는 모든 객체를 ObservableSource로 변환하고 Future.get() 메서드를 호출한 값으로 변환합니다.
fromPublisher()
-> Publisher를 Observable로 변환합니다.
fromCallable()
-> Callable을 Observable로 변환합니다.
하나씩 예제를 통해서 살펴보도록 하겠습니다!!
fromArray() 연산자
가지고 있는 아이템들이 배열일 경우에는 fromArray() 연산자를 이용하여 아이템을 순차적으로 발행할 수 있습니다.
String[] itemArray = new String[]{"h", "e", "a", "l"};
Observable source = Observable.fromArray(itemArray);
source.subscribe(t -> Log.d("log_test", "" + t), throwable -> Log.d("log_test", "error!!!"));
결과
fromIterable() 연산자
ArrayList, Hashset 등과 같이 일반적으로 Iterable을 구현한 자료 구조 클래스는 fromIterable() 연산자를 통해 쉽게 Observable로 변환이 가능합니다. 예제를 통해 알아볼게요
ArrayList<String> list = new ArrayList();
list.add("h");
list.add("e");
list.add("a");
list.add("l");
Observable source = Observable.fromIterable(list);
source.subscribe(t -> Log.d("log_test", "" + t));
결과
fromFuture 연산자
Future 인터페이스는 비동기적인 작업의 결과를 구할 때 사용합니다. 보통 Executor Servuce를 통해 비동기적인 작업을 할 때 사용합니다. Future 또한 fromFuture() 연산자를 통해 Observable로 변경이 가능합니다. Emitter은 Observable 내부에서 Future.get() 메서드를 호출하고, Future의 작업이 끝나기 전까지 스레드는 블로킹됩니다.
Future<String> future = Executors.newSingleThreadExecutor()
.submit(() -> {
Thread.sleep(5000);
return "health";
});
Observable source = Observable.fromFuture(future);
source.subscribe(t -> Log.d("log_test", "" + t)); //블로킹되어서 기다립니다. 그후 5초뒤 출력
결과
fromPublisher() 연산자
Publisher는 잠재적인 아이템 발행을 제공하는 생산자로 Subscriber로부터 요청을 받아 아이템을 발행합니다. fromPubliser() 연산자를 통해 Publisher를 Observable로 변환할 수 있습니다.
Publisher<String> publisher = s -> {
s.onNext("h");
s.onNext("e");
s.onNext("a");
s.onNext("l");
s.onComplete();
};
Observable source = Observable.fromPublisher(publisher);
source.subscribe(t -> Log.d("log_test", "" + t));
결과
fromCallable() 연산자
callable 인터페이스는 비동기적인 실행결과를 반환한다는 점이 Runnable과 다릅니다. fromCallable() 연사자를 통해 Callable을
Observable로 변환하고 비동기적으로 아이템을 발행할 수 있습니다.
Callable<String> callable = () -> "healchang coding";
Observable source = Observable.fromCallable(callable);
source.subscribe(t -> Log.d("log_test", "" + t));
결과
이렇게 몇가지 연사자를 살펴보았지만 Observable 이뢰에 조금 특별한 스트림들이 존재합니다. 바로 Single, Maybe, Completable입니다. 이것들은 다음 시간에 알아보겠습니다.
'안드로이드 > RxJava' 카테고리의 다른 글
[RxJava] 다양한 Observable의 형태 ( Maybe ) (0) | 2021.08.24 |
---|---|
[RxJava] 다양한 Observable의 형태 ( Single ) (0) | 2021.08.24 |
[RxJava] just() 연산자 (0) | 2021.08.23 |
[RxJava] Observerble 이란? (0) | 2021.08.18 |
[RxJava] 명령형 프로그래밍과 반응형 프로그래밍의 차이 (0) | 2021.08.12 |