RxJava 학습회 Week1
12460 단어 RxJava
카탈로그
ReactiveX
이른바 ReactiveX
Sync vs Async
동기화 프로그래밍
단일 데이터 가져오기: T getData()
// 単一データを同期的に取得して出力
Integer i = getData();
System.out.println(i);
동기화 프로그래밍
여러 데이터 가져오기: Iterable<T> getData
// 複数データを同期的に取得して出力
Iterable<Integer> iter = getData();
for (Integer i : iter) {
System.out.println(i);
}
문제.
단일 데이터 가져오기:
T getData()
// 単一データを同期的に取得して出力
Integer i = getData();
System.out.println(i);
동기화 프로그래밍
여러 데이터 가져오기: Iterable<T> getData
// 複数データを同期的に取得して出力
Iterable<Integer> iter = getData();
for (Integer i : iter) {
System.out.println(i);
}
문제.
// 複数データを同期的に取得して出力
Iterable<Integer> iter = getData();
for (Integer i : iter) {
System.out.println(i);
}
비동기 프로그래밍
단일 데이터: Future<T> getData()
Future<Integer> f = getData();
...(その他の処理)...
Integer i = f.get();
System.out.println(i);
비동기 프로그래밍
여러 데이터 가져오기: Observable<T> getData();
Observable<Integer> observable = getData();
observable.subscribe(i -> System.out.println(i));
...(その他の処理)...
장점
Future<Integer> f = getData();
...(その他の処理)...
Integer i = f.get();
System.out.println(i);
여러 데이터 가져오기:
Observable<T> getData();
Observable<Integer> observable = getData();
observable.subscribe(i -> System.out.println(i));
...(その他の処理)...
장점
이른바 ReactiveX
RxJava
RxJava
차리다
compile "io.reactivex.rxjava2:rxjava:2.0.4"
샘플 코드
Observable 생성 // 配列を元にして Observable を生成
Integer[] numbers = {1, 2, 3, 4, 5};
Observable<Integer> observable
= Observable.fromArray(numbers);
● Observable에는 많은 factory 방법이 있음
subscribe // Observables を subscribe する
observable.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(integer);
}
});
실행하면 1
2
3
4
5
단일 Item의 Observable // 単一アイテムの Observable
Observable<Integer> observable = Observable.just(1);
⇒ 2.x에서는 Single 을 사용하는 것이 좋습니까?(확인 필요)
Java 8의 λ 활용 // Java 8 のラムダ構文
observable.subscribe(integer -> {
System.out.println(integer);
});
방법 참조가 더 간단observable.subscribe(System.out::println);
비동기 처리 // 5秒後に 1 を生成する Observable
Future<Integer> future = Executors.newSingleThreadExecutor().submit(() -> {
// バックグラウンドスレッドで実行
Thread.sleep(5000);
return 1;
});
Observable<Integer> observable = Observable.fromFuture(future);
observable.subscribe(System.out::println); // 終了しないので注意
Operators
모음 작업
// 配列を元にして Observable を生成
Integer[] numbers = {1, 2, 3, 4, 5};
Observable<Integer> observable
= Observable.fromArray(numbers);
// Observables を subscribe する
observable.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(integer);
}
});
실행하면 1
2
3
4
5
단일 Item의 Observable // 単一アイテムの Observable
Observable<Integer> observable = Observable.just(1);
⇒ 2.x에서는 Single 을 사용하는 것이 좋습니까?(확인 필요)
Java 8의 λ 활용 // Java 8 のラムダ構文
observable.subscribe(integer -> {
System.out.println(integer);
});
방법 참조가 더 간단observable.subscribe(System.out::println);
비동기 처리 // 5秒後に 1 を生成する Observable
Future<Integer> future = Executors.newSingleThreadExecutor().submit(() -> {
// バックグラウンドスレッドで実行
Thread.sleep(5000);
return 1;
});
Observable<Integer> observable = Observable.fromFuture(future);
observable.subscribe(System.out::println); // 終了しないので注意
Operators
모음 작업
1
2
3
4
5
// 単一アイテムの Observable
Observable<Integer> observable = Observable.just(1);
⇒ 2.x에서는 Single 을 사용하는 것이 좋습니까?(확인 필요)Java 8의 λ 활용 // Java 8 のラムダ構文
observable.subscribe(integer -> {
System.out.println(integer);
});
방법 참조가 더 간단observable.subscribe(System.out::println);
비동기 처리 // 5秒後に 1 を生成する Observable
Future<Integer> future = Executors.newSingleThreadExecutor().submit(() -> {
// バックグラウンドスレッドで実行
Thread.sleep(5000);
return 1;
});
Observable<Integer> observable = Observable.fromFuture(future);
observable.subscribe(System.out::println); // 終了しないので注意
Operators
모음 작업
// Java 8 のラムダ構文
observable.subscribe(integer -> {
System.out.println(integer);
});
observable.subscribe(System.out::println);
// 5秒後に 1 を生成する Observable
Future<Integer> future = Executors.newSingleThreadExecutor().submit(() -> {
// バックグラウンドスレッドで実行
Thread.sleep(5000);
return 1;
});
Observable<Integer> observable = Observable.fromFuture(future);
observable.subscribe(System.out::println); // 終了しないので注意
Operators
모음 작업
예:
'N transformed'의 형식으로 11~15개의 데이터 열을 순서대로 출력하는 요소
싱크로율 Iterable<T>
의 경우:Iterable<Integer> iter = getDataFromLocal();
iter.skip(10)
.take(5)
.map(s -> s + "transformed")
.forEach(s -> System.out.println(s));
비동기적인 수법 Observable<T>
의 경우:Observable<Integer> observable = getDataFromNetwork();
observable.skip(10)
.take(5)
.map(i -> i + "transformed")
.subscribe(s -> System.out.println(s));
Marble Diagrams
Iterable<T>
의 경우:Iterable<Integer> iter = getDataFromLocal();
iter.skip(10)
.take(5)
.map(s -> s + "transformed")
.forEach(s -> System.out.println(s));
비동기적인 수법 Observable<T>
의 경우:Observable<Integer> observable = getDataFromNetwork();
observable.skip(10)
.take(5)
.map(i -> i + "transformed")
.subscribe(s -> System.out.println(s));
Marble Diagrams
Observable<Integer> observable = getDataFromNetwork();
observable.skip(10)
.take(5)
.map(i -> i + "transformed")
.subscribe(s -> System.out.println(s));
ref: http://reactivex.io/documentation/observable.html
Pull vs Push
모든 것을 Push로 바꾸다
ReactiveX 설립자 Erik Meijer:
그는 세계 최전방을 계속 걷고 싶다면 반드시'push', 즉 적극적이고 주동적이어야 한다고 말했다.그는'풀'을 사용하는 것은 기본적으로 프로그램에 각양각색의 차단점을 넣기 때문에 효율이 매우 낮다고 말했다.
ref: https://www.infoq.com/jp/news/2015/12/erik-meijer-hacker-way
다음번
Reference
이 문제에 관하여(RxJava 학습회 Week1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Shiozawa/items/a9328fb39491a983afff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)