안드로이드 모듈을 Maven 배포(sonatype을 이용) 방법을 알아보자.

2016년에 JCenter 배포하는 방법을 정리했었는데, jcenter는 사라졌습니다.

이제 Maven을 통한 모듈 배포가 가능한데, JCenter가 쉽게 접근할 수 있는 반명 Maven은 배포하려면 준비해야 할 것들이 많습니다.

이 글에서는 지라 티켓 등록부터 MavenCentral 배포한 결과물까지 살펴보려고 합니다.

필자의 경우 배포한 모듈은 Retrofit FlowCallAdapterFactory입니다. Retrofit에서 Flow을 바로 사용하기 위한 모듈입니다.

Retrofit-FlowCallAdapterFactory

이 글에서 알아볼 내용

  • 모듈을 생성하는 내용은 담지 않습니다.
  • 모듈을 배포하기 위해 사용했던 sonatype Nexus repository 사용 방법을 간단하게 다룬다.
  • 배포를 위한 준비 과정 및 배포 코드(gradle.kts)를 담는다.
  • 배포를 위한 과정을 담지만, 사용한 기술에 대한(kotlin precompiled을) 설명하는 부분은 없습니다.

Read More

Android Multi module(멀티 모듈)의 dependency는 어떻게 하는 게 좋을까?

아키텍쳐가 잘 적용되어 있다면 모듈 나누는 고민도 한 번쯤 해보았을 겁니다. 모듈을 나누는 건 어렵지 않습니다.

모듈을 어떤 식으로 나눌지가 어려운 고민이지만, 단순히 클래스의 기능별로 모듈을 나눌 수 있습니다.

  • Base 모듈 : BaseActivity, BaseViewModel, BaseFragment를 포함하는 모듈
  • Network 모듈 : 네트워크 관련 모듈
  • 유틸 모듈 : 공통 유틸

어떠한 기준으로 모듈을 분리할지만 잘 정하면 어렵지 않습니다.

하지만 사전 설계를 잘 해둬야 추후 중복 디펜던시 발생 및 이유 없는 모듈이 추가됨을 관리할 수 있으리라 생각됩니다.

이 글에서 알아볼 내용

  • 모듈을 나누는 모든 과정을 소개하지는 않습니다.
  • 모듈을 나누면서 디펜던시 의존성을 어떻게 가져갈지 간략하게 정리합니다.

Read More

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