public class Subject {
/*
* 1. AsyncSubject 클래스
*
* Observable 에서 발행한 마지막 데이터만 얻어 어는 subject 클래스 (차가운 Ob 를 뜨거운 Ob로 변경해주는 클래스)
*
* - 완료됨 과 동시에 마지막 데이터를 구독자들에게 전달 (이전 데이터는 전달하지 않는다.)
*
* */
/*
* 2. BehaviorSubject 클래스
*
* 구독자가 구독을 하면 가장 최근 값 혹은 기본값을 넘겨주는 클래스이다.
*
* */
/*
* 3. PublishSubject 클래스
*
* 가장 평범한 Subject 클래스 이다. 오직 해당시간에 발생한 데이터를 그대로 구독자에게 전달 받는다.
*
* */
/*
* 4. ReplaySubject 클래스
*
* 주의 : Subject 클래스의 목적은 뜨거운 Observable 을 활용하는 것인데 차가운 Observable 처럼 동작하기 때문이다.
* 구독자가 새로 생기면 항상 데이터의 처음부터 끝까지 발행하는 것을 보장해 줍니다.
* 그러므로 모든 데이터 내용을 저장해두는 과정 중 메로리 누수가 발생할 가능성을 염두에 두고 사용할 때 주의해야 합니다.
*
* */
public static void main(String[] args) {
// AsyncSubject class
//ex 1
AsyncSubject<String> subject = AsyncSubject.create();
subject.subscribe(data -> System.out.println("subscriber #1 => " + data));
subject.onNext("1");
subject.onNext("3");
subject.subscribe(data -> System.out.println("Subscriber #2 => " + data));
subject.onNext("5");
subject.onComplete();
System.out.println(" ========================== ");
// ex2
Float[] temperature = {10.1f, 13.4f, 12.5f};
Observable<Float> source = Observable.fromArray(temperature);
AsyncSubject<Float> subject2 = AsyncSubject.create();
subject2.subscribe(data -> System.out.println("Subscribe #3 => " + data));
source.subscribe(subject2);
System.out.println(" ==========================\nBehaviorSubject ");
//BehaviorSubject
//ex1
BehaviorSubject<String> beSubject = BehaviorSubject.createDefault("6");
beSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
beSubject.onNext("1");
beSubject.onNext("3");
beSubject.subscribe(data -> System.out.println("Subscriber 2 => " + data));
beSubject.onNext("5");
beSubject.onComplete();
System.out.println(" ==========================\nPublishSubject ");
//PublishSubject class
// ex1
PublishSubject<String> puSubject = PublishSubject.create();
puSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
puSubject.onNext("1");
puSubject.onNext("3");
puSubject.subscribe(data -> System.out.println("Subscriber #2 -> " + data));
puSubject.onNext("5");
puSubject.onComplete();
System.out.println(" ==========================\nReplaySubject ");
//ReplaySubject class
// ex 1
ReplaySubject<String> reSubject = ReplaySubject.create();
reSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
reSubject.onNext("1");
reSubject.onNext("3");
reSubject.subscribe(data -> System.out.println("Subscriber #2 => " + data));
reSubject.onNext("5");
reSubject.onComplete();
}
}
데이터 발행자(data source) |
데이터 수신자 |
Observable Single Maybe Subject Completable
|
구독자(Subscriber) 옵서버(Observer) 소비자(Consumer)
|
|
|