Observable

사내 스터디로 ReactiveX 반응형 프로그래밍 스터디를 시작하려는데 안드로이드 개발자분과 같이 진행하기 위해 RxJava 책으로 시작했다. Java는 정말 오랜만이었는데 어차피 Reactive 개념이 포인트라 상관은 없었다.

RxJava 프로그래밍 - 예스24
8가지 핵심 개념으로 쉽게 이해하는 리액티브 프로그래밍 입문서버나 애플리케이션은 다양한 데이터를 처리하느라 늘 분주하다. 그런데 데이터양이 기하급수적으로 늘면서 기존의 프로그래밍 방식으로 이를 처리하기가 점점 어려워지고 있다. 이에 데이터의 입출력 흐름에 따라…

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