Observable 처음 만들기 - create(), fromArray(), fromIterable()

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에서만 처리해야 한다.
  • 배압을 직접 처리해야 한다.

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