-
[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를 사용해서 텍스트가 바뀌면 옵저버로 전달해서 바로 화면을 변경할 수 이 있게 만들었다.
결과

짜잔~
버튼을 누르면 숫자가 올라간다.
이제 조금 이해가 된 듯
역시 직접 해보는 게 가장 이해가 잘되는듯하다.룰루~
이제 라이브 데이터를 어디에 써야 할지 고민해보고 적용해야겠다.
그리고 왜 뷰 모델이랑 쓰는 지도 알겠다.
Live Data만 쓰니 딱히 장점을 모르겠는 느낌'Android📱' 카테고리의 다른 글
[Android] Custom View와 Activity의 좌표가 다른 문제 (0) 2022.03.18 [안드로이드 오류] Cannot resolve symbol (0) 2022.03.12 [Android] Call Back 함수공부 (0) 2022.03.06 Android 이벤트 리스너의 기원.....과연 어디까지 가는것인가 (0) 2022.03.05 [kotlin] interface Listener로 event listener 구현해보기 (0) 2022.03.04