Android view에서 ViewModel을 어떻게 호출해 사용해 볼 수 있을까?

읽기 전에

이 글은 정승욱 님의 액티비티 : 코드 제로라는 제목의 영상 중 ViewModel에서 Click event 처리에 대한 부분을 샘플 코드로 작성하였습니다.

함께 일하면서 익힌 코드의 일부 방향성을 글에 담고 있으며, 글 작성에 대한 동의를 받았습니다.

본문

위 영상에서 언급한 내용을 포함하고 있으나, 일부 이해하지 못할 수 있으니 그냥 간단하게 이러한 방법으로도 접근이 가능하구나 정도로만 이해하시면 좋겠습니다.

이 글에서는 View에서 ViewModel을 어떻게 호출하고 접근하는 게 좋은지를 다루기 위한 글입니다.

RxJava 또는 Flow를 활용해 Click event 처리를 stream으로 받아 처리하도록 만들어 줄 수 있습니다. 대표적인 예는 JakeWharton/RxBinding의 예가 됩니다.

RxBinding처럼 Rx 스트림을 활용하는 방법을 사용하여 작성하는 코드의 샘플입니다. 이 글에서 언급하는 코드는 Flow만을 활용하였습니다.

참고로

RxJava와 Flow를 쓴다고 해서 모두 UnitTest 가능한 형태는 아닙니다.

  • RxJava의 마지막은 subscribe를 해야 동작하지만, dispose가 리턴됩니다. 이러면 이어서 테스트할 수 없습니다.
  • Flow의 마지막 역시 launchIn을 해야 동작하는데, Job이 리턴됩니다. 이 역시 테스트가 불가능합니다.

테스트가 가능한 형태로 진화하려면 subscribe, launchIn을 외부의 다른 방법을 활용해야 하는데, 이는 위 영상에서 언급하고 있으니 참고하시면 되겠습니다.


이 글에서 설명하지 않는 부분

  • Flow, RxJava에 대해서는 설명하지 않습니다.
  • View의 캐싱에 대해서는 다루지 않습니다.
  • UnitTest 가능한 형태로의 접근을 설명하지는 않습니다.


이 글에서 알아볼 내용

  • View에서 ViewModel을 호출하는 방법이 아닌 ViewModel에서 처리하는 방법을 알아봅니다.
  • ViewModel에서 처리할 때 Flow 활용하는 방법을 알아봅니다.

Read More

Android DataBinding에서 활용하는 LiveData, Observable, StateFlow를 알아본다.

이전에 작성한 글에서 LiveData의 내부 동작을 통해 중복 데이터 사용에 대해서 살펴보았다.

이번 글에서는 LiveData에 대해서 생각하는 부분을 나열하고, DataBinding 시 사용할 수 있는 또 다른 Observable, StateFlow를 간단하게 알아본다.

RxJava는 직접적이지는 않지만 간접적으로 활용해야 한다.

DataBinding을 활용하거나, observe를 할 때 어떤 도구를 활용하는 게 좋을지 가이드를 해보려고 한다.

이 글에서 도움 될 문서는 아래와 같습니다.


이 글에서 알아볼 내용

  • LiveData의 장? 단점?
  • Observable

Read More

Kotlin coroutine suspend? 디컴파일을 통해 알아보자.

Kotlin 코루틴에는 suspend 함수를 활용할 수 있습니다. suspend가 추가되면 코루틴에서 동작하도록 강제하게 되는데 단순 강제만은 아닙니다.

코루틴이 종료되면 suspend 함수 역시 종료되어야 합니다.(suspend를 활용한다고 무조건 종료하는 것은 아닌데, 다음에 별도로 작성해보겠다.)

이번 글은 아래의 suspend 함수를 디컴파일해보고, suspend 키워드가 어떤 일을 하는지 직접 구현해본다면 어떻게 접근 가능할지 살펴보겠습니다.

suspend fun doSomething(): Int {
  delay(1000L)
  return 100
}

이 글에서 도움 될 문서는 아래와 같습니다.


이 글에서 알아볼 내용

  • suspend 함수 사용 법
  • suspend 함수 디컴파일
  • Continuation 살펴보기

Read More

Android LiveData의 사용법과 내부 코드를 통한 UI 처리, 중복 처리 등 살펴보기

Android 개발 시 자주 활용하는 LiveData. LiveData의 데이터 처리를 알아보는 글이다.

이 글에서 도움 될 문서는 아래와 같다.


이 글에서 알아볼 내용

  • LiveData 사용법을 알아본다.
  • MutableLiveData와 LiveData의 구분?
  • LiveData는 항상 UI로 처리하는 코드를 살펴본다.
  • 중복 데이터의 위험성을 알아본다.

Read More

Retrofit2와 Coroutines 사용 시 스케줄러는 어떻게 처리할까? - 내부 코드로 알아보자.

Retrofit 사용 시 알아두면 좋은 것이라는 주제로 만든 영상이다.

별건 아니고, Retrofit의 통신 방식 중 coroutines을 활용했을때 알아두면 좋은 부분을 정리했던 영상이다.

이 글에서 텍스트로 한 번 더 정리하고, 이 글에 도움 될 문서는 아래와 같다.


이 글에서 알아볼 내용

  • Corotuines과 Retrofit2을 함께 사용할 때 스케줄러 처리가 궁금하다면 읽어보시길
  • Retrofit2의 KotlinExtensions.kt를 알아본다.
  • suspendCancellableCoroutine에 대해서 알아본다.

Read More