Seoplee
개발의 섭리, Seoplee의 개발
Seoplee
  • 분류 전체보기 (54)
    • Android (26)
      • Architecture (12)
      • Compose (0)
      • Tips (11)
      • 트러블슈팅 (3)
    • IOS (1)
      • Tips (1)
    • Kotlin (1)
    • Coroutine (3)
      • Flow (3)
    • RxJava (12)
    • CI&CD (1)
    • WEB (8)
    • Network (1)
    • ETC (1)
    • (임시) (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Seoplee

개발의 섭리, Seoplee의 개발

RxJava

RxJava 01 - (번외) Hot Observable 예제 in Android

2022. 1. 4. 01:18

지난 포스팅 의 내용 중 Hot Observable에 대해 궁금하여 좀 더 알아보았다.

Cold 생산자: 일반 동영상을 보는것처럼 구독을 요청하면, 아이템을 발행하기 시작한다.
Hot 생산자: 실시간 방송을 보는것처럼, 아이템 구독이 시작된 후로 모든 구독자에게 동시에 같은 아이템을 발행한다.

데이터 기반(data-driven)의 옵저버블은 대부분 Cold Observable 로 만들어진다.
HTTP의 GET이나 데이터베이스 쿼리처럼, 동일한 옵저버블 객체에서 서로 다른 결과를 생성할 때에도 마찬가지로 Cold 속성을 지닌다.
실제 사용 예시로는 Retrofit 통신이나 Room 쿼리 같은 경우가 있다. (가장 일반적으로 사용하는 타입)

Hot Observable은 아이템 발행이 시작된 이후로 모든 구독자에게 동시 같은 아이템을 발행한다.
첫 번째 구독자가 옵저버블을 구독 한 몇 초 후에 두 번째 구독자가 같은 옵저버블을 구독한다면, 둘은 동시에 같은 아이템을 수신하며 두 번째 구독자는 구독 이전에 발행된 아이템을 놓칠 수도 있다.

Hot Observable in Android

EditText에 Hot Observable을 이용하여 검색어 자동완성 기능을 구현해 보았다.
(Ref: https://youngest-programming.tistory.com/390)

private val searchSubject = PublishSubject.create<String>()
private val compositeDisposable = CompositeDisposable()
(...중략)
     binding.editText.doOnTextChanged { text, _, _, _ ->
         searchSubject.onNext(text.toString())
     }

     compositeDisposable.add(
         searchSubject
             .observeOn(AndroidSchedulers.mainThread())
             .debounce(500, TimeUnit.MILLISECONDS)
             .filter { it.isNotBlank() }
             .map { it.trim() }
             .subscribe { data ->
                 viewModel.getData(data)
             }
     )
동작예시

edittext

Debounce & Throttle

  • Debounce는 입력 주기가 끝나면 출력한다.
    입력 주기 내에 새로운 데이터가 들어오면 이전 데이터는 취소하고 새로운 데이터를 출력한다.
    debounce값이 1초로 설정된 버튼이 있다면, 버튼을 빠르게 계속 클릭해도 최후 1초동안 클릭이벤트가 없을 때, 마지막 클릭이벤트를 수행한다.
  • Throttle은 입력 주기동안의 데이터를 한번에 처리한다.
    이벤트가 발생 후 입력주기동안의 새로운 이벤트 실행을 제한한다.
    Thottle값이 1초로 설정된 버튼이 있다면, 버튼을 빠르게 계속 클릭해도 1초동안은 최초 1회의 클릭만 처리한다.
저작자표시 (새창열림)

'RxJava' 카테고리의 다른 글

RxJava 04 - Flowable과 Observable의 연산자 (part.02)  (0) 2022.01.18
RxJava 04 - Flowable과 Observable의 연산자 (part.01)  (0) 2022.01.18
RxJava 03 - RxJava의 매커니즘  (0) 2022.01.15
RxJava 02 - RxJava를 사용하는 데 필요한 배경 지식  (0) 2022.01.13
RxJava 01 - RxJava란 무엇인가?  (0) 2021.12.28
    'RxJava' 카테고리의 다른 글
    • RxJava 04 - Flowable과 Observable의 연산자 (part.01)
    • RxJava 03 - RxJava의 매커니즘
    • RxJava 02 - RxJava를 사용하는 데 필요한 배경 지식
    • RxJava 01 - RxJava란 무엇인가?
    Seoplee
    Seoplee
    개발공부를 하며 기록할만한 것들을 정리해놓은 블로그입니다.

    티스토리툴바