Jetpack 사용을 위한 기초 공부 AAC(ViewModel)

샘플은 구글

패턴의 변화

  • ViewModel클래스는 UI 관련 데이터를 라이프 사이클을 고려한 방식으로 저장하고 관리하도록 설계되었습니다. 이 ViewModel클래스를 사용하면 화면 회전과 같은 구성 변경시에도 데이터를 유지할 수 있습니다.

뷰모델

  • 뷰모델은 옵저버패턴이라고 이해중
  • 데이터가 변화 가능한곳에 콜백 같은 옵저버를 추가한다.
  • UI 쪽에서 해당 데이터의 콜백을 이용하여 업데이트 한다.
  • 데이터를 콜백 형태로 묶어 놓기 때문에 위에서 말하는 UI 와 완전 분리가 가능하다.
  • 예를 들어 특정 데이터가 변경 되면 콜백 발생하도록 하고 콜백에서 UI 업데이트를 처리한다.
  • 이런 개념으로 이해 함
  • BasicRxJavaSampleKotlin 기본으로 공부 중
  • 콜백을 넣어 주는 부분이 직접접이지 않아 이해 하고 있어야 이해가 된다.
  • 아래와 같은 코드가 있을 때 Rx 를 이용해서 viewModel.userName() 변화를 감지하여 UI 업데이트
  • 클릭 이벤트에서 updateUserName() 를 호출 하면 DB 완료후 결과를 다시 읽어 UI 를 업데이트 함
  • 하지만 뷰모엘을 이용하면 콜백으로 변경 내용을 확인 하므로 UI 업데이트에 대한 의존성을 없앨수 있다.

```kotlin override fun onStart() { super.onStart() // Subscribe to the emissions of the user name from the view model. // Update the user name text view, at every onNext emission. // In case of error, log the exception. disposable.add(viewModel.userName() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ this.user_name.text = it }, { error -> Log.e(TAG, “Unable to get username”, error) })) }

    override fun onStop() {
        super.onStop()
    
        // clear all the subscription
        disposable.clear()
    }
    
    private fun updateUserName() {
        val userName = user_name_input.text.toString()
        // Disable the update button until the user name update has been done
        update_user_button.isEnabled = false
        // Subscribe to updating the user name.
        // Enable back the button once the user name has been updated
        disposable.add(viewModel.updateUserName(userName)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ update_user_button.isEnabled = true },
                        { error -> Log.e(TAG, "Unable to update username", error) }))
    }

```

PyeongHo

즐겁게 또 즐겁게