ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Adroid] Live Data 실험해보기
    Android📱 2022. 3. 9. 00:10

    Live Data 시현해보기

    옵저버 패턴을 이해해야 이해가 좋다

    Live Data

    • 관찰 가능한 데이터 홀더 클래스
    • 관찰 가능한 일반 클래스와 달리 LiveData는 수명 주기를 인식
      • 액티비티, 프래그먼트, 서비스 등 다른 앱 구성요소의 수명 주기를 고려
      • 수명 주기 인식을 통해 LiveData는 활동 수명 주기 상태에 있는 앱 구성요소 관찰자만 업데이트
    • 실시간?처럼 운영이 가능하다

    미션에서 MVP패턴에서 LiveData를 사용해야 할 일이 생겼는데
    뷰 모델과 함께 쓰는 거밖에 안 나와서 Live Data 자체를 이해해 보기 위해 시현을 해보았다.

    일단, MVP를 간단하게 구현

    interface

    interface Contract {
        interface View
    
        interface Presenter {
            fun getCount() : Int
    
            fun plusCount()
        }
    }

    뷰와 프레젠터를 연결해야한다.

    Data

    class Data{
        private var count = 0
    
        fun getCount() = count
    
        fun plusCount() {
            count++
        }
    }

    초간단 구현이라 count만 넣어놓기 ㅎㅎ

    Presenter

    class Presenter(view: Contract.View) : Contract.Presenter {
        private val data = Data()
        override fun getCount() = data.getCount()
    
        override fun plusCount() = data.plusCount()
    }

    역시나 오버라이드 받아서 count 올리기와 get만 구현

    MainActivity

    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Button
    import android.widget.TextView
    import androidx.lifecycle.MutableLiveData
    import androidx.lifecycle.Observer
    
    class MainActivity : AppCompatActivity(), Contract.View {
        private var liveText: MutableLiveData<String> = MutableLiveData()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val presenter = Presenter(this)
            val text = findViewById<TextView>(R.id.text_test)
            val btn = findViewById<Button>(R.id.btn_change)
            liveText.observe(this, Observer {
                text.text = it
            })
    
            btn.setOnClickListener {
                presenter.plusCount()
                liveText.value = "${presenter.getCount()}"
            }
        }
    }

    메인에서는 LiveData를 사용해서 텍스트가 바뀌면 옵저버로 전달해서 바로 화면을 변경할 수 이 있게 만들었다.

    결과

    화면-기록-2022-03-09-오전-12 06 37

    짜잔~

    버튼을 누르면 숫자가 올라간다.
    이제 조금 이해가 된 듯
    역시 직접 해보는 게 가장 이해가 잘되는듯하다.

    룰루~

    이제 라이브 데이터를 어디에 써야 할지 고민해보고 적용해야겠다.
    그리고 왜 뷰 모델이랑 쓰는 지도 알겠다.
    Live Data만 쓰니 딱히 장점을 모르겠는 느낌

    Live data 시현

Designed by Tistory.