Observable
사내 스터디로 ReactiveX 반응형 프로그래밍 스터디를 시작하려는데 안드로이드 개발자분과 같이 진행하기 위해 RxJava 책으로 시작했다. Java는 정말 오랜만이었는데 어차피 Reactive 개념이 포인트라 상관은 없었다.
create()
- just()는 데이터를 넣으면 자동으로 알림 이벤트를 발생하지만, create()는 알림 메소드를 직접 호출해야 한다.
- 만드는 것만으로는 이벤트를 발행하지 않고 구독한 시점에서 값을 방출한다.
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
- Observable이 구독 해지되었을때 콜백을 모두 해제해야 한다.(메모리 릭)
- 구독자가 구독하는 동안에만 onNext, onComplete를 호출해야 한다.
- 에러는 오직 onError에서만 처리해야 한다.
- 배압을 직접 처리해야 한다.(RxSwift 해당없음)
fromArray()
- 배열에 들어 있는 데이터를 차례로 방출해 준다.
Integer[] arr = {100, 200, 300};
Observable<Integer> source = Observable.fromArray(arr);
source.subscribe(System.out::println); // 100, 200, 300
int[] 배열 처리
- Rxjava에서 int배열을 인식시키려면 Integer[]로 변환해야 한다.
- 다른 래퍼 타입에도 적용 가능하다.
int[] intArray = {400, 500, 600};
Observable<Integer> source = Observable.fromArray(toIntegerArray(intArray));
source.subscribe(System.out.println::);
fromIterable()
- Iterator 인터페이스를 구현하는 클래스에서 객체 생성이 가능하다.
List<String> names = new ArrayList<>(); // Iterable 인터페이스 구현체
names.add("A");
names.add("B");
names.add("C");
Observable<String> source = Observable.fromIterable(names);
source.subscribe(System.out::prinntln)l; // A, B, C