Observable과 Observer는 Rx의 시작에 해당됩니다.
물론 Observable과 Observer가 시작인만큼 이것을 이해하는 것은 매우 중요합니다.
하지만 이것들 만으로는 Observer 패턴을 단순하게 확장만 할 수 있습니다.
Observer 패턴을 더 강력하게 이용하기 위해서는 ReactiveExtension 곧 Reactive X를 활용해야합니다.
Rx연산자들은 Observer들이 발행한 데이터를 가지고 변형하고, 결합하고, 조작하고 작업할 수 있도록 합니다.
이러한 Rx 연산자들은 콜백의 장점인 효율성을 가지면서도, 선언하는 방식으로 비동기적인 작업들을 구성할 수 있지만,
반면에 콜백의 단점인 콜백이 중첩되는 현상은 나타나지 않습니다.
변수, 클래스, if, while, for 등등 프로그래밍 언어에서 제공하는 키어드 대신 Rx에서 제공하는 연산자를 이용하여 비동기 프로그래밍에 필요한 주요 로직을 만들 수 있습니다.
리액티브 연산자는 곧 함수이며, 정확히는 부수효과가 없는 순수함수(pure function)입니다.
이번 포스팅에서는 RX의 연산자중 팩토리 연산자(생성 연산자)에 대해서 알아보도록하겠습니다.
just는 Observable을 생성하는 가장 쉬운 방법입니다.
즉, 기존의 자료구조를 인자로 받아서 이를 차례대로 발행하는 Observable을 생성합니다.
실제 데이터 발행은 구독자가 생겼을 때부터 시작하기 때문에 차가운 Observable을 만들어 줍니다.
인자로 데이터를 1개에서 10개까지의 데이터를 넣을 수 있습니다.
단, 데이터 타입이 모두 같아야합니다.
Observable.just(1, 2, 3, 4, 5, 6)
.subscribe(System.out::println);
Observable<T> create(ObservableOnSubscribe<T> source)
// ObservbleOnSubscribe<T> 원형
public interface ObservableOnSubscrbie<T>{
void subscribe(ObservableEttier<T> e) throws Exception;
}
source.subscribe(System.out::println);
- 실행결과
100 200 300
## 4.4 fromArray()
- 배열 데이터를 Observable로 만들 때 사용합니다.
- 예시 코드
Integer[] arr = {100, 200, 300}
Observable
- 실행 결과
100 200 300
## 4.5 fromIterable()
- Iterable 인터페이스를 구현한 클래스 인스턴스로 부터 Observable을 만들 때 사용합니다.
Interable에 대해서 간략히 설명하자면, Iterable 인터페이스는 Iterater 패턴을 구현한 것으로,다음에 어떤 데티어가 있는지와 그 값을 얻어오는 것에만 관여할 뿐
데이터 타입에 상관없이 사용할 수 있다는 장점이 있습니다.
Iterator 인터페이스는 다음과 같습니다.
public interface Iterator
Iterable
Observable
- 실행결과
Jerry William Bob
### 4.5.2 Set 인터페이스 객체로 Observable 만들기
Set
Observable
- 실행결과
Seoul London Paris
### 4.5.3 BlockingQueue 인터페이스 객체로 Observable 만들기
BlockingQueue
Observable
### 4.6 fromCallable()
기존 자바에서 제공하는 비동기 클래스나 인터페이스와 연동하여 사용할 수 있습니다.
자바 5에서 제공되는 Callable 인터페이스는 비동기 실행후 결과를 반환하는 call() 함수를 정의합니다.
public interface Callable
이러한 Callbale 인터페이스 객체와 fromCallable() 함수를 이용하여 Observable을 생성할 수 있습니다.
Callable
Observable
- 실행 결과
Hello Callable
### 4.7 fromFuture()
Future 인터페이스 역시 자바 5에서 추가된 동시성 API로 비동기 계산의 결과를 구할 때 사용합니다.
Future 인테페이스 객체와 fromFuture() 함수를 이용하여 Observable을 만들 수 있습니다.
Future
Observable
- 실행 결과
Hello Future
### 4.8 fromPublisher()
Publisher는 자바 9의 표준인 Flow API의 일부입니다.
Publisher와 fromPublisher() 함수를 통해서 Observable 을 만들 수 있습니다.
Publisher
Observable
- 실행 결과
Hello Observable.fromPublisher() ```
이러한 생성 연산자외에도 굉장히 많은 생성 연산자가 있습니다.
기존의 데이터 구조를 사용하지 않는 추가적인 생성연산자에 대해서는 다음 포스팅에서 더 자세히 다루도록 하겠습니다.