본문 바로가기

분류 전체보기

(64)
[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..
[RxJava]Observable - just()함수 just()함수 just() 함수는 인자로 넣은 데이터를 차례로 발행하려고 Observable을 생성한다.(실제 데이터의 발행은 subscribe() 함수를 호출해야 시작한다. 한개의 값을 넣을 수도 있고, 인자로 여러 개의 값을(최대 10개) 넣을 수가 있다. 단, 타입이 같아야한다. import io.reactivex.Observable; public class FirstExample { public void emit() { Observable.just(1,2,3,4,5,6) .subscribe(data -> System.out.println(data)); } public static void main(String args[]) { FirstExample demo = new FirstExample()..
[RxJava] Observable 클래스 Observable은 데이터 흐름에 맞게 알림을 보내 구독자가 데이터를 처리할 수 있도록 한다. ​ RxJava 1.x에서는 데이터 소스를 Observable과 Single 클래스로 구성했다. RxJava 2.x에서는 여전히 두 클래스가 존재하지만, Observable, Maybe, Flowable 클래스로 구분해 사용한다. ​ 간단하게 설명하자면 Maybe 클래스는 reduce()함수나 firstElement()함수와 같이 데이터가 발행될 수 있거나, 혹은 발행되지 않고도 완료가 되는 경우를 의미한다. ​ Flowable 클래스는 Observable에서 데이터가 발행되는 속도가 구독자가 처리하는 속도보다 현저하게 빠른경우 즉, 배압이슈(Back Pressure)에 대응하는 기능을 추가 제공한다. RxJ..
[RxJava] 마블 다이어그램 보는 방법 다양한 리액티브 연산자를 이해하는데 가장 중요한 것이 마블 다이어 그램이다. 글에 비해서 시각적으로 이해하기 쉽기 때문에 마블 다이어 그램이 효과가 좋다. 마블 다이어그램이 처음에는 이해가 되지 않겠지만, 계속해서 보면 익숙해질 것이다. ​ 책에서 나온 예제를 가지고 설명을 적어보겠다. 아래의 그림은 flip()함수의 마블 다이어그램의 예를 보여준다. 무슨 역할을 하는지 6가지로 나누어 설명할 것이다. ​ 1번. 위에 있는 실선은 Observable의 시간 표시줄(time line)이다. 시간순으로 데이터가 발행되는 것을 표현한다. ​ 2번. Observable이 발행하는 데이터이다. 시간 순서대로 별, 삼각형, 오각형, 원 등의 도형을 발행한다. 데이터를 발행할 때는 onNext 알림이 발생하는데 나중..
[RxJava] RxJava 학습 순서 RxJava의 javadoc 문서를 보아도 글로 된 함수의 설명만으로는 이 함수가 무슨 동작을 하는지 이해하기 어렵다. 지금 공부하는 책에서 학습 순서를 제시하고 있는데 아래와 같이 학습 순서를 따라가기 바란다. ​ 1. Observable 클래스를 명확하게 이해한다. (특히, Hot Observable과 Cold Observable)의 개념을 꼭 이해해야한다.) ​ 2. 간단한 예제로 map(), filter(), reduce(), flatMap() 함수의 사용법을 익힌다. ​ 3. 생성 연산자, 결합 연산자, 변환 연산자 등 카테고리별 주요 함수를 공부한다. ​ 4. 스케줄러의 의미를 배우고 subscribeOn()과 observeOn() 함수의 차이를 알아둔다. ​ 5. 그 밖의 디버깅, 흐름 제어..