티스토리 뷰

1. LiveData, ViewModel은 Google에서 제공하는 라이브러리이자, MVVM 아키텍처(디자인패턴)을 구현하기 위한 컴포넌트입니다.

2. MVVM는 UI와 UI에 표시되는 데이터를 묶어서 관리하자는 개념의 디자인 패턴입니다. Model(데이터), View(실제 뷰), ViewModel(뷰의 상태)가 있고, ViewModel의 상태가 업데이트 되면 자동으로 View가 업데이트 됩니다.

2-1. 즉 원래같으면 Activity-UI가 직접연결되어있지만, 이 사이에 ViewModel 이라는 완충재가 들어간 느낌입니다.

3. MVVM은 동적인 코드 부분 / UI부분을 확실하게 분리하기 위해서 주로 사용하는데, 이는 안드로이드에 GOD ACTIVITY 문제를 해결하는데 도움을 줍니다 (한 액티비티에 너무 많은 코드(역할)이 주어지는 것을 방지)

4. LiveData는 observe가능한 변수인데, observe하게되면 값이 변화할때마다 지정된 코드를 실행할 수 있습니다. 

4-1. LiveData는 일반적인 이벤트-리스너 패턴에 안드로이드 생명주기 인식 기능이 추가되어, 액티비티나 프래그먼트가 활성 상태일 때만 업데이트를 받고 메모리 누수를 방지합니다.

5. ViewModel의 경우 Activity보다 LifeCycle이 길어 화면 방향 전환 등 Activity가 destroy되고 재생성되는 케이스에서 데이터 유지시 사용 가능! (같은 케이스에 대한 해결책으로 onSaveInstanceState/onRestoreInstanceState 메서드를 통한 번들(Bundle) 저장 방식도 있음)

class MainViewModel : ViewModel() {
    // LiveData 정의 - 불변 타입을 외부에 노출
    private val _userName = MutableLiveData<String>("")
    val userName: LiveData<String> = _userName
    
    // LiveData 값 업데이트 메소드
    fun updateUserName(name: String) {
        _userName.value = name // _userName.setValue(name)과 같음=>mainThread에서만 사용가능
        _userName.postVale(name) // handler를 사용해 update
    }
    
    // ViewModel이 파괴될 때 호출됨
    override fun onCleared() {
        super.onCleared()
        // 리소스 정리 작업 수행
    }
} 
// MainActivity.kt
// LiveData 관찰 설정
viewModel.userName.observe(this) { newName ->
// 값이 변경될 때마다 호출됨
	nameTextView.text = newName
}
        
// 버튼 클릭 이벤트에서 ViewModel 데이터 업데이트
updateButton.setOnClickListener {
	val name = nameEditText.text.toString()
    viewModel.updateUserName(name)
}

기본적인 사용법은 위와 같고, 

활용은 

1. 싱글톤으로 생성해 액티비티/서비스/프레그먼트간 데이터 전송 용도로 사용

2. 다른 액티비티에서 여러번 사용되는 비슷한 동작을 수행하는 UI에 적용해 코드 재사용

 

마지막으로 

DataBinding, Flow등을 얹어서 사용하기도 한다!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함