투케이2K

365. (java/자바) [RxJava] Observable create subscribe 구독 시 AndroidSchedulers.mainThread() 메인 스레드 실행 추가 본문

Java

365. (java/자바) [RxJava] Observable create subscribe 구독 시 AndroidSchedulers.mainThread() 메인 스레드 실행 추가

투케이2K 2026. 2. 12. 20:24
728x90
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 구분 : RxJava / 간단 소스 / 메인 스레드 처리


- 사전) RxJava 설명 : 

  >> Rx (ReactiveX) :

    - ReactiveX 는 관찰가능한 절차를 통해 비동기, 이벤트 기반 프로그램을 구성하기 위한 라이브러리 입니다

    - ReactiveX 는 Observer Pattern 옵저버 패턴 을 확장하며, Sequence 를 조합할 수 있는 연산자를 지원합니다

    - ReactiveX 는 low-level Thread, 동기화, Thread 안전성, non-blocking I/O 에 관한 우려를 줄입니다

  >> RxJava (Reactive java) :

    - Reactive Programming 패러다임을 자바에서 구현한 프로그래밍 라이브러리 입니다

    - RxJava 는 함수형 프로그래밍 방식을 도입했으며, Side Effect 가 없는 순수 함수를 지향하기 때문에 Thread-Safe 합니다

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

// -----------------------------------------------
// [사전 코드 필요 설명 정리]
// -----------------------------------------------
// create() : 프로그래머가 직접 onNext, onComplete, onError를 호출해야함 (just 와의 차이점)
// Disposable isDisposed : 구독 연결 관계 확인 (true / false)
// Disposable dispose : 구독 연결 관계 끊기 (onComplete 이벤트가 정상 실행 시 별도로 호출할 필요 없음)
// -----------------------------------------------



// -----------------------------------------------
// [Observable create 사용해 생성 실시 : 생성자]
// -----------------------------------------------
// Observable<String> : String 값 onNext 반환 수행
// -----------------------------------------------

Observable<String> observable = Observable.create(subscriber -> {
    try {
        if (!subscriber.isDisposed()) { // ✅ [연결된 구독자가 있는 경우]

            // [onNext] 데이터 알림 전달
            subscriber.onNext("SUCCESS");

            // [onCompleted] 완료 알림 전달
            subscriber.onComplete();
        }

    } catch (Exception e) {
        e.printStackTrace();

        // ❌ [onError] 에러 알림 전달
        subscriber.onError(e);
    }
});

// -----------------------------------------------



// -----------------------------------------------
// [Observable 생성자 를 구독 (Subscribe) 및 데이터 소비 수행]
// -----------------------------------------------

Disposable disposable = observable
      .subscribeOn(Schedulers.io()) // (선택) 데이터 생성/업스트림을 백그라운드로 수행
      .observeOn(AndroidSchedulers.mainThread()) // ✅ 구독 콜백을 메인 스레드에서 실행
      .subscribe(
              value -> { // ✅ onNext 응답 처리
                S_Log.d("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onNext] : " + String.valueOf(value) + " >>>>>>>>>>>>>>>>>>>>");
              },
              error -> { // ❌ onError 응답 처리
                S_Log.e("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onError] : " + String.valueOf(error.getMessage()) + " >>>>>>>>>>>>>>>>>>>>");
              },
              () -> { // ✅ onCompleted 응답 처리
                S_Log.w("KWON_TWOK", ">>>>>>>>>>>>>>>>>>>> [Observable] : [onCompleted] >>>>>>>>>>>>>>>>>>>>");
              }
      );

// -----------------------------------------------

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[Observable] create 사용해 생성자 만들기 및 subscribe 구독 결과 메시지 확인

https://kkh0977.tistory.com/3599

https://blog.naver.com/kkh0977/222970344668?trackingCode=blog_bloghome_searchlist


[Observable] just 사용해 생성자 만들기 및 subscribe 구독 결과 메시지 확인

https://blog.naver.com/kkh0977/222970341475?trackingCode=blog_bloghome_searchlist


[Subject] AsyncSubject 사용해 onNext() 발행 된 마지막 데이터 출력 실시

https://blog.naver.com/kkh0977/222970372557?trackingCode=blog_bloghome_searchlist


[Observable] take 사용해 처음 발행하는 n개의 데이터 만 출력 실시

https://blog.naver.com/kkh0977/222970381903?trackingCode=blog_bloghome_searchlist


[Observable] take 사용해 처음 발행하는 n개의 데이터 만 출력 실시

https://blog.naver.com/kkh0977/222970381903?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments