Android AAC-ViewModel 대신 Lifecycle을 적용해 보자.

Android ViewModel에서 Flow를 이용한 View Controller 방법과 UnitTest 가능한 형태를 살펴보았습니다.

이번 글에서는 Lifecycle에 알아서 반응하여, 초기화할 수 있는 형태로 접근해 보려고 합니다.

이번 글에서는 Android AAC Lifecycle을 활용해 보겠습니다.


이 글에서 알아볼 내용

  • Lifecycle에 따라 함수 호출을 없애보자.
  • AAC Lifecycle을 알아본다.
  • AAC ViewModel 대신 Lifecycle을 적용해 본다.

Read More

Android view에서 ViewModel을 호출했는데, UnitTest는 어떻게 할까?

Android ViewModel에서 Flow를 이용한 View Controller 방법을 살펴보았습니다.

이전 글에서도 작성했지만 그 코드 상태로는 테스트 코드 활용이 불가능합니다.

이번 글에서는 테스트 가능한 형태를 만들기 위한 작업을 해보겠습니다.


이 글에서 알아볼 내용

  • UnitTest 가능한 형태로 함수 분리
  • UnitTest를 위한 dependency 추가
  • UnitTest 작업

Read More

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