Android Arcitecture Component – ViewModel
ViewModel 클래스는 UI 관련된 데이터를 생명주기를 고려한 방식으로 저장하고 관리하도록 설계 되어있습니다.
ViewModel 클래스를 사용하면 화면 회전과 같은 구성 변경 사항에도 데이터가 그대로 유지 된다.
Note : ViewModel을 안드로이드 프로젝트로 가져오려면 프로젝트에 AAC 라이브러리를 추가해야합니다.
안드로이드 프레임워크는 액티비티와 프레그먼트 같은 UI 컨트롤러의 생명주기를 관리합니다. 프레임워크는 사용자의 액션 또는 디바이스의 특정 이벤트에서 사용자의 제어를 벗어나 UI 컨트롤러를 재생성하거나 파괴하는 작업을 하게되죠.
만약 시스템이 UI컨트롤러를 부수거나 재생성한다면 일시적으로 UI 관련된 데이터들은 없어지기 마련입니다. 예를 들면 앱에서 ‘친구목록’을 포함하고 있는 액티비티가 있다고 치고, 액티비티의 상태변화(화면회전 등)로 인해 액티비티가 다시 재생성 되는 경우에는 새로운 액티비티는 ‘친구목록’을 다시 가져와야만 한다. 단순한 데이터의 경우에는 onSaveInstanceState()를 사용해서 해당데이터를 번들로부터 복원 할 수 있지만 이 방법은 직렬화 할 수 있는 소량의 데이터에만 적합하며 잠재적으로 많은 양의 데이터(친구목록, 비트맵 등) 에는 적합하지 않습니다.
또 다른 문제점은 UI 컨트롤러가 비동기 호출을 자주 만들어서 반환하는 데 시간이 걸릴 수 있다는 것인데, UI 컨트롤러는 이러한 호출을 관리하고 잠재적인 메모리 누수를 방지하기 위해 UI컨트롤러가 파괴된 후에는 시스템을 정리해야 합니다. 이 관리에는 많은 유지보수가 필요하고 구성변경을 위해 객체가 다시 만들어지는 경우 객체에 이미 만든내용을 다시 만들어야하기 때문에 리소스가 낭비 됩니다.
액티비티나 프레그먼트와 같은 UI 컨트롤러들은 주로 UI데이터를 보여주거나 사용자에 반응하거나 또는 런타임 퍼미션 요청 다이얼로그와 같은 운영체제와 상호작용을 다루기도 합니다. UI컨트롤러가 DB나 네트워크 작업들을 하면 코드량이 액티비티나 프레그먼트에 치중되게 되는데, UI컨트롤러에 과도하게 코드가 많아지면 다 한클래스에서 모든작업을 스스로 다 처리하게 됩니다. 이렇게 클래스 하나가 거대해지면 테스트하기도 그만큼 힘들어진다.
UI컨트롤러에서 뷰 데이터 소유를 분리하는것이 훨씬 쉽고 효율적인 앱 만들기 또는 테스트가 될것이다.
0개의 댓글