viewmodel 4

Android Jetpack Paging 3 적용하기

아래는 공식문서의 Paging 3 개요 일부이다. `Repository` 에서는 PagingSource와 RemoteMediator 둘 중 하나를 쓰면 된다고 이해했다. 이중에서 나는 PagingSource를 사용했다. 하지만 만약 네트워크 연결이 불안정하거나 오프라인 상태에서도 데이터를 로드하기 위해서라면 RemoteMediator가 적절하다. `ViewModel`에서는 Pager() 를 통해 PagingSource 객체를 생성하고 이를 UI(Activity등) 에서 반응할 수 있게 한다. 'PagingDataAdapter`는 RecyclerView에서의 Adapter + ListAdapter 를 상상하면 된다. 1. PagingSource 코드는 아래와 같다. load()에서는 네트워크 통신을 포함한..

Programming/Android 2021.09.03

[Android] Koin + Unit Test 하기

개발에서 TDD라는 유명한 용어가 있다. Test Driven Development의 약자로서 테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것이다. TDD의 장점은 결함(버그)가 줄어들고, 코드 복잡도가 떨어진다는 것이다. 거의 완성해가는 프로젝트에서 Unit Test를 하는 것이 TDD라고는 할 수는 없다. 하지만 앞으로의 프로젝트를 진행하는데 TDD를 하는 방법을 익힐 수 있을 것이다. BlindCommunity2 앱(모두의 취준생커뮤니티2)에서 Unit Test를 진행하여 보았다. 안드로이드에서 테스트는 크게 아래와 같이 3가지의 단계가 있다. 1. UI Test 실제 디바이스나 에뮬레이터로 UI를 테스트하는 것이다. 2. Integration Test 개발자가 작성한 UI를 제외한 코드..

Programming/Android 2021.05.21

MVVM에서 ViewModel의 Event 전달하기2(Event Wrapper)

지난 포스팅의 외국인 개발자분에게 보낸 메일에 답장은 오지 않았다. 하지만 답장 받기도 전에 내가 Event Wrapper에 대해 오해하고 있다는 것을 알게 되었다. 이벤트 발생시 마다 Event객체를 생성하는게 아닐 것이라 생각했지만 그건 큰 오산이었다. viewModel이 생성된 이후 단 한번만 발생시키는 이벤트에 사용되는 것이 Event Wrapper가 아니라 하나의 이벤트에 대해 liveData를 observing하는 View가 이벤트를 중복으로 처리하지 못하게 하는 것이다. 한 마디로 Event Wrapper의 용도에 대해 착각하고 있었다. 이벤트 발생시 마다 Event 객체를 만들어 LiveData에 넣어야한다. 역시 외국인 개발자 아저씨가 맞았다!! Event Wrapping은 특수한 상황에..

Programming/Android 2021.04.28

MVVM에서 ViewModel의 Event 전달하기(Event Wrapper)

MVVM Architecture에서 기본 개념 중 하나는 View는 ViewModel을 알지만, ViewModel은 View를 알지 못하게 하자는 것이다. 그로인해 ViewModel은 로직에 집중할 수 있게 된다. AAC ViewModel에서 작업이 끝나면 LiveData를 통해 observing하는 View가 이를 처리할 수 있게 된다. ViewModel에서 View의 메소드를 가진 인터페이스를 통해 이벤트를 전달했었는데 좋지 않은 방법이라는 것을 깨닫고 LiveData로 이벤트를 핸들링하는 방법을 알게 되었다. 이는 이벤트를 상태의 일부로 처리하는 것이다. liveData가 변경될 때 마다 호출 되는 것이 원래 목적이라면 하던대로 LiveData로 하면 된다. 그런데 Snackbar/Toast 메세지..

Programming/Android 2021.04.27