[TIL] 230913 회고

서정한·2023년 9월 14일
0

내일배움캠프 7기

목록 보기
45/66

Intro

어제부터 MVVM에대해 배우고 살펴보는중이다. 안드로이드에서는 AAC ViewModel과 LiveData를 이용하여 MVVM 패턴을 구현할 수 있다고한다.
MVVM의 주된 관심사는 어떻게 UI Layer와 Data Layer를 나눠서 각각 자기 할일을 잘 하게 하는 것이다. 안드로이드의 경우 비동기 작업이 많은데다가 라이프사이클등 여러가지 작업이 복합적으로 얽혀있기에 MVVM 구조를 사용하여 관심사를 최대한 분리해야 유지보수성이 좋아지고 확장성있는 앱을 개발할 수 있다.

ListView+ViewModel+LiveData

  • 해당 기술을 사용하여 구현하는것은 그리 어렵지 않다. 그런데 ViewModel과 LiveData를 쓸때 LifeCycle에 대한 이해가 없으면 왜 안되는지도 모를것같다.
  • 내가 작업하면서 경험한 이슈는 TabLayout+ViewPager2에 위의 기술들을 적용해봤는데 Fragment에서 ViewModel을 선언하고 사용할때 LifeCycle을 어떤것으로 설정하는가에따라 observer가 작동하거나 동작하지 않았다.
    • viewModel 선언할때 Fragment에서 requireActivity()를 넣어줘야 의도한대로 정상동작하는것을 확인했다.
  • 내가 사용한 Fragment는 2개였고 그래서 탭이 2개가 있다. 내가 하려고했던 행동은 Todo에서 스위치를 true로 바꾸면 Bookmark에 Todo에서 true한 스위치의 item을 그대로 복사해와서 Bookmark의 RecyclerView에 생성하는 것이다.
  • 여기서 알게된 사실은 ViewPager를 사용할때 Fragment는 최초1회는 페이지를 실행해줘야 Fragment의 View가 그려진다는 것인데(당연한것일지도..?) 내가 생각했던 예상결과는 ViewPager는 MainActivity에서 실행되므로 MainActivity에서 adapter를 Set하면 당연히 Fragment들도 같이 init 될 것이라고 예상했었다. 결과는 전혀 아니었다. Fragment는 탭이 클릭(스와이프)된 순간 init되었다. 그래서 사용할 ViewModel을 선언할때 들어가는 ViewModelStoreOwner를 requireActivity()로 넣어줘야만 실행되었던것같다.

    정리해보면..! Fragment와 Activity의 Lifecycle에 대한 이해가 있어야 ViewModel을 의도한대로 사용할 수 있겠다는 것이었다..!

Outro

RecyclerView를 기점으로 많은 개념이 한꺼번에 쏟아져나오다보니 구현하는것에 급급해진것 같다. 오늘부터 옵시디언을 활용해 배우고 공부한 것들을 차곡차곡 정리해가려고하는데 그동안 배운것들과 앞으로 공부할것들을 잘 정리해놔서 필요할때마다 바로바로 찾아볼수있는 저장소를 만들어야겠다.

profile
잘부탁드립니다!

0개의 댓글