https://developer.android.com/topic/libraries/architecture/viewmodel

안드로이드 공식문서 ViewModel을 참고하여 정리한 글입니다.

ViewModel 구현

아키텍처 구성요소의 UI 데이터 준비를 담당하는 UI 컨트롤러에 ViewModel Helper Class를 제공한다.

ViewModel 객체는 구성이 변경되는 동안 자동으로 저장되므로, 이 객체가 보유한 데이터는 Activity, Fragment에서 즉시 사용할 수 있다. 앱에서 사용자의 목록을 표시해야 한다면 사용자의 목록을 얻어서 Activity나 Fragment대신 ViewModel에 저장하도록 할당해야한다.

class MyViewModel: ViewModel() {
		private val users: MutableLiveData<List<User>> by lazy {
				MutableLiveData<List<User>>().also {
						loadUsers()
				}
		}
		
		fun getUsers(): LiveData<List<User>> {
				return users
		}

		private fun loadUsers() {
			
		}
}

그 이후에 Activity나 Fragment에서 사용할 수 있다.

class MainActivity : AppCompatActivity() {
		override fun onCreate(savadInstanceState: Bundle?){
				super.onCreate(savadInstanceState)
        setContentView(R.layout.activity_main)

				val viewModel: MyViewModel by viewModels()
				// val viewModel = ViewModelProvider(this, )
				viewModel.getUsers().observe(this, Observer<List<User>>){ users ->
						// update UI
				}
		}
}

ViewModel은 View, Lifecycle 그리고 Activity Context를 참조해서는 안된다.

ViewModel의 생명주기

ViewModel의 객체의 범위는 ViewModel을 초기화 할 때 ViewModelProvider에 전달되는 Lifecycle(Activity, Fragment)로 지정된다. 범위가 지정된 ViewModel은 Activity나 Fragment가 끝날 때

까지 메모리에 남아있는다.