본문 바로가기

프로그래밍/RxJava

(22)
[RxJava] Single - just() 함수와 Observable에서 Single 클래스를 사용하는 다양한 방법 just()함수 사용 Single 클래스는 Observable 클래스와 거의 같은 방법으로 활용이 가능하다. 아래 코드는 just() 함수를 활용해 Single 객체를 생성하는 코드이다. private void single(){ Single source = Single.just("Hello Single"); source.subscribe(System.out::println); } 결과값 Hello Single Observable에서 Single 클래스 사용 Single은 Observable의 특수한 형태이므로, Observable에서 변환할 수있다. 아래 코드는 Observable에서 Single 클래스를 사용하는 다양하는 방법이다. private void fromObservable(){ //1. 기존 ..
[RxJava] Single 클래스 Single 클래스는 RxJava 1.x부터 존재하는 Observable의 특수한 형태이다. Observable 클래스는 데이터를 무한하게 발행할 수 있지만 Single 클래스는 오직 1개의 데이터만 발행이 가능하다. 보통 결과가 유일한 서버 API를 호출할 때 유용하게 사용할 수 있다. Single 클래스의 마블 다어그램은 아래와 같다. 여기서 제일 중요한 점은 데이터 하나가 발행과 동시에 종료(onSuccess)된다는 점이다. 라이프 사이클 관점에서 보면, onNext()와 onComplete() 함수가 onSuccess()로 통합되었다고 보면된다. 따라서 Single 클래스의 라이프 사이클 함수는 onSuccess(T value) 함수와 onError() 함수로 구성되어 있다.
[RxJava] Observable - fromPublisher() 함수 Publisher는 자바 9의 표준인 Flow API의 일부이다. 먼저, fromPublisher() 함수를 통해서 Observable을 만드는 방법이다. private void basic(){ Publisher publisher = (Subscriber
[RxJava] Observable - fromFuture() 함수 Future 인터페이스 역시 자바 5에서 추가된 동시성 API로 비동기 계산의 결과를 구할 때 사용한다. 보통 Executor 인터페이스를 구현한 클래스에 Callable 객체를 인자로 넣어 Future 객체를 반환한다. 그리고 get() 메소드를 호출하면 Callable 객체에서 구현한 계산 결과가 나올때가지 기다리게 된다.(블로킹) 먼저 Future 객체에서 fromFuture() 함수를 사용해 Observable를 생성하는 방법이다. private void basic(){ Future future = Executors.newSingleThreadExecutor().submit(() -> { Thread.sleep(1000); return "Hello Future"; }); Observable sou..
[RxJava] Observable - fromCallable() 함수 RxJava는 비동기 프로그래밍을 위한 라이브러리이다. 지금까지는 기본적인 자료구조로 Observable을 생성하는 부분을 살펴봤다면, 이번에는 기존 자바에서 제공하는 비동기 클래스나 인터페이스와의 연동을 살펴볼 차례이다. 먼저 살펴보는 것은 자바 5에서 추가된 동시성 API인 Callable 인터페이스이다. 이 인터페이스는 비동기 실행을 한 후 반환하는 call() 메서드를 정의하고 있다. run() 메서드가 있는 Runnable 인터페이스처럼 메서드가 하나고, 인자가 없다는 점에서 비슷하지만 실행결과를 리턴한다는 점에서 차이가 있다. 또한 Executor 인터페이스의 인자로 활용되기 때문에 잠재적으로 다른 스레드에서 실행되는 것을 의미하기도 한다. 먼저 Callable 객체와 fromCallable(..
[RxJava] Observable - fromIterable()함수 Iterable 인터페이스는 반복자(Iterator)를 반환한다. ​ Iterator 인터페이스는 이터레이터 패턴을 구현한 것으로 다음에 어떤 데이터(아이템)가 있는지와 그 값을 얻어오는 것만 관여할 뿐 특정 데이터 타입에 의존하지 않는 장점이 있다. 자바의 많은 컬렉션 클래스가 이 인터페이스를 구현하고 있다. ​ Iterator 인터페이스에는 hasNext(), next() 메서드가 있다. Iterator 인터페이스를 구현하는 대표적인 클래스는 ArrayList(List 인터페이스), ArrayBlockingQueue(BlockingQueue 인터페이스), HashSet(Set 인터페이스), LinkedListStack, TreeSet, Vector 등이 있다. 책에서 소개한 것은 List, Set, ..
[RxJava] Observable - fromArray() 함수 지금까지 단일 데이터를 이용한 예제를 다뤘다. 근데, 단일 데이터가 아닐경우에는 어떻게 해야할까? fromXXX() 계열의 함수를 사용한다. ​ 예전에 RxJava 1.x에서는 from()과 fromCallable() 함수만 사용했다. 그런데 from() 함수를 배열, 반복자, 비동기 계산 등에 모두 사용하다보니 모호함이 생겼다. 그래서 RxJava 2.x부터는 from()을 세분화 했고, 그중 하나가 지금 소개하는 fromArray() 함수이다. public void integerArray() { Integer[] arr = {100, 200, 300}; Observable source = Observable.fromArray(arr); source.subscribe(System.out::println..
[RxJava] Observable - create()함수 just() 함수는 데이터를 넣으면 자동으로 알림 이벤트가 발생하지만, create() 함수는 onNext, onComplete, onError 같은 알림을 개발자가 직접 호출해야한다. 그래서 create()는 라이브러리가 무언가를 해준다기보다 개발자가 무언가 직접 하는 느낌이 강한 함수이다. 위의 그림은 create() 함수의 마블 다이어그램이다. 구독자에게 데이터를 발행하려면, onNext() 함수를 호출해야하고, 모든 데이터를 발행한 후에는 반드시 onComplete() 함수를 호출해야한다. Observable source = Observable.create( (ObservableEmitter emitter)->{ emitter.onNext(100); emitter.onNext(200); emitt..