Observable을 생성할 때에는 직접 인스턴스를 만들지 않고 정적 팩토리 함수(생성 연산자)를 호출한다. 이중 가장 기본적인 팩토리 함수인 just() , create() , fromXXX() 알아보자
함수에 파라미터로 넣은 데이터를 차례로 발행한다. 파라미터로 10개까지 전달할 수 있다. 자동으로 onNext, onComplete 혹은 onError가 호출된다. 데이터가 그래로 발행되므로 다르게 변경하고 싶으면 map 과 같은 연산자를 통해 변환해야한다.
//그대로 발행
Observable.just(1,2,3)
.subscribe(System.out::println)
------------------------------------------------------
결과
1
2
3
// 변환 하고 싶은 경우
Observable.just(1,2,3)
.map(x-> x*10)
.subscribe(System.out::println)
------------------------------------------------------
결과
10
20
30
Observable을 생성하지만 just()와는 다르게 프로그래머가 직접 onNext, onComplete, onError를 호출해야한다. 위에서 본 예제에서 쓰인 방식이다
Observable.create(emitter -> {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}).subscribe(System.out::println);
------------------------------------------------------
결과
1
2
3
여러 데이터를 다뤄야 하는 경우 사용한다. 정의된 메소드의 종류는 다음과 같으며 특정 타입의 데이터를 Observable로 바꿔주는 메소드이다. 이 중 몇개만 대표적으로 보겠다.
Integer [] array = {1, 2, 3, 4, 5};
Observable.fromArray(array)
.subscribe(System.out::println);
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
Observable.fromIterable(arrayList)
.subscribe(System.out::println);
Method | 설명 |
---|---|
Create | onNext, onError, onComplete를 일일이 명시하며 Observable 생성 |
Defer | Observer가 구독할 때까지 기다렸다가 구독하면 그 때 Observable 생성 |
Enpty/Naver/Throw | 아이템을 0개 방출한 후 종료/종료하지않음/에러발생 |
Interval | 시간 간격을 두고 데이터를 방출하는 Observable 생성 |
Range | 특정 범위 내 Integer 형태의 아이템 발행하는 Observable 생성 |
Repeat | 아이템을 지정한 횟수만큼, 혹은 무한히 반복하여 발행 |
Start | 연산 후 특정 값을 반환, 함수처럼 작용함 |
Timer | 지정한 시간 delay 이후 아이템 발행 |
..... | 다른연산자도 많음 |