Intro
저번주 팀과제 진행후 오늘부터 ViewModel과 LiveData를 공부중에있다. 그리고 이것들은 ListAdapter를 통하여 RecyclerView에서 보여질 데이터를 처리한다.
공부하면서 아직 해결하지못한 문제와 새롭게 알게된 것을 정리해보려고 한다.
ListAdapter
- 기존에 사용하던 RecyclerView Adapter와 차이점은 바로 직접 List의 업데이트를 신경쓰지 않는다는 것이다.
- 이것은 DiffUtil이라는 안드로이드팀에서 제공하는 비교 알고리듬을 통해 기존 리스트와 새로운 리스트 내부 데이터 차이를 비교하여 바뀐부분만 업데이트 해준다.
- 사용해보니 무엇보다 코드가 간결해진다는 큰 장점이 있었다.
ViewModel
- 일반적으로 ViewModel이라는 단어는 MVVM 패턴에서 보이는 단어이다. 어느 블로그 글을보니 MS에서 만든 MVVM은 View와 Data의 결합도를 낮춰 가독성좋고 유지보수하기 편한 구조를 만들기위해 고안했다고 나왔는데 Android에서 ViewModel의 주된관심은 UI의 상태 저장이라고 한다.
- ViewModel은 보통 LiveData와 같이 쓴다고한다. LiveData는 LifeCycle에 맞게 데이터를 저장하고 관찰할 수 있다. 데이터 변화가 감지될때마다 ListAdapter에 업데이트해주면 알아서 List가 바뀐다.
현재 막히는 부분
- 현재 2개의 Fragment를 ViewPager에 연결해서 Tablayout과함께 사용중이다. 간단한 Todo앱이고 ViewModel+LiveData+ListAdapter를 사용하여 데이터를 띄우려고 시도중에있다.
- 내가 구현하려고하는것은 Todo 탭의 item에 스위치가 있는데 스위치가 켜졌을때 Bookmark탭에도 해당 item이 생기고 스위치를 끄면 Bookmark에 등록했던 해당 item을 삭제하는 기능이다.
- 일단 추가/삭제는 잘 이뤄지지만 문제는 bookmark에서 스위치를 껐을때 bookmark 탭의 item은 잘 삭제되었으나 Todo탭의 true였던 모든 스위치가 전부 false로 바뀐다는것이다...
- 현재 여러 예제를 살펴보며 내가 구현한 부분중 잘못된부분이 없는지 체크중이다..
Outro
ViewModel, LiveData, ListAdapter에 대한 이해가 부족해서 생기는 이슈들인 것 같다. 역시 기술은 반복구현인데 일단 어떻게든 구현되게 만들어놓고 계속 반복구현하면서 공부해봐야겠다..!