๐Ÿ“š TL; DR

Subscribe

Consumer / Action Interface

๐Ÿ“š Subscribe

๐Ÿ“– Subscribe

Stream์—์„œ ๋ฐœํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๊ทธ์— ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ํ–‰๋™์„ ํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ตฌ๋…์ž๋ฅผ ๊ด€์ฐฐ ๋Œ€์ƒ์— ๋“ฑ๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด RxJava์—์„  subscribe๋ผ๋Š” operator๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ operator๋ฅผ ํ†ตํ•ด ๊ด€์ฐฐ ๋Œ€์ƒ๊ณผ ๊ด€์ฐฐ์ž๋ฅผ ์—ฐ๊ฒฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( docs )

์•ž์„œ ์‚ดํŽด๋ณธ Observer Pattern ํฌ์ŠคํŒ…์—์„œ๋Š”, Custom UI์— Observer interface๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ Observer ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

public interface RamsObserver<T> {
    void notifyDataIsChanged(T value);
}
package com.example.rxjavalecture.observerpattern.oberserverpattern.customui

import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView
import com.example.rxjavalecture.R
import com.example.rxjavalecture.observerpattern.oberserverpattern.RamsObserver
import com.example.rxjavalecture.observerpattern.oberserverpattern.ObserverPatternActivity

class PercentTextView : AppCompatTextView, RamsObserver<Int> {

    constructor(context: Context) : super(context)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

    init {
				// ObserverPatternActivity์— ์žˆ๋Š” progressSubject์— ๊ตฌ๋… ์‹ ์ฒญ
        ObserverPatternActivity.progressSubject.subscribe(this)
    }

		// Percent ๊ฐ’์ด ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๋•Œ ํ•  ํ–‰๋™์„ ์ •์˜
    override fun notifyDataIsArrived(value: Int?) {
        value?.let {
            text = String.format(context.getString(R.string.first_week_observer_pattern_result_format), it)
        }
    }
}

์ด๋ ‡๊ฒŒ Observer๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด๋„ ๋˜์ง€๋งŒ, ์•ž์„  ํฌ์ŠคํŒ… ( Stream ๊ตฌํ˜„์ฒด์˜ ์ข…๋ฅ˜ ( Observable / Flowable / Single ... ) )์—์„œ๋Š”, Stream์˜ ๊ตฌํ˜„์ฒด ๋งˆ๋‹ค ๋ฐœํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋‹ฌ๋ผ ๊ด€์ฐฐ์ž์— ํ•„์š”ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ์‚ดํŽด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.