Rx Observable 생성 -4-

Cloud0·2021년 9월 14일
0
post-thumbnail

Observable 생성하기


Observable을 생성할 때에는 직접 인스턴스를 만들지 않고 정적 팩토리 함수(생성 연산자)를 호출한다. 이중 가장 기본적인 팩토리 함수인 just() , create() , fromXXX() 알아보자

Just()

함수에 파라미터로 넣은 데이터를 차례로 발행한다. 파라미터로 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

create()

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

fromXXX()

여러 데이터를 다뤄야 하는 경우 사용한다. 정의된 메소드의 종류는 다음과 같으며 특정 타입의 데이터를 Observable로 바꿔주는 메소드이다. 이 중 몇개만 대표적으로 보겠다.

  • fromArray()
    배열을 Observable로 변환해준다.
 	Integer [] array = {1, 2, 3, 4, 5};
	Observable.fromArray(array)
      	  .subscribe(System.out::println);
  • fromArray()
    Iterable Interface가 구현되어 있는 Class를 Observable로 변환한다. Iterable이 구현되어 있는 Class에는 대표적으로 ArrayList, Stack, Vector 등이 있다.
	ArrayList<Integer> arrayList = new ArrayList<>();
	arrayList.add(1);
	arrayList.add(2);
	arrayList.add(3);
	Observable.fromIterable(arrayList)
       	 .subscribe(System.out::println);

기타

Method설명
CreateonNext, onError, onComplete를 일일이 명시하며 Observable 생성
DeferObserver가 구독할 때까지 기다렸다가 구독하면 그 때 Observable 생성
Enpty/Naver/Throw아이템을 0개 방출한 후 종료/종료하지않음/에러발생
Interval시간 간격을 두고 데이터를 방출하는 Observable 생성
Range특정 범위 내 Integer 형태의 아이템 발행하는 Observable 생성
Repeat아이템을 지정한 횟수만큼, 혹은 무한히 반복하여 발행
Start연산 후 특정 값을 반환, 함수처럼 작용함
Timer지정한 시간 delay 이후 아이템 발행
.....다른연산자도 많음

REFERENCE

profile
이...사...중......

0개의 댓글