Koin 라이브러리를 활용하여 프로젝트에 DI 를 진행하면 코드의 재 사용성이 높아지고, 분명 유지보수에 용이해진다.
Koin 이 제공하는 다양한 기능들 중 강력한 기능이 하나 있는데, 바로 ViewModelProvider 없이 ViewModel 인스턴스를 생성하여 사용할 수 있는 기능이다. 또한 Fragment 에서 Activity 의 ViewModel 을 재사용할 수 있도록 도와주기도 한다.
KoinModules 에 ViewModel 을 추가해주고, startKoin 의 Modules 목록에 이를 추가하기만 하면 된다.
하지만 필자는 어느날 앱을 개발하던 중 Koin 을 활용하여 ViewModel 인스턴스를 생성하려고 했으나
Koin 에서 제공하는, ViewModel 주입을 위한 'by viewModel' 키워드가 제대로 동작하지 않아 온갖 구글링, 삽질을 총동원 하게 되었다.
직접 Koin 레포에 들어가 관련 Issue 글들을 모두 찾아보았지만, 필자에게 적절한 해답은 나오지 않았다.
그런데 아래와 같이 상당히 많은 개발자들이 같은 문제로 골머리를 앓고 있는 듯 하였다.
https://github.com/InsertKoinIO/koin/issues/383
그러던 중 위 글을 보게 되었는데, 이러한 답글을 보게 되었다.
물론 동작하지 않았다. 그러나 이 답변을 통해 한 가지 시도를 해볼 수 있었고, 그 결과 드디어 정상 동작하게 되었다.
바로 패키지명의 'android' 를 'androidx' 로 바꾸어 수동으로 Import 를 하니 해결되었다. 아래처럼 말이다.
import org.koin.androidx.viewmodel.ext.android.viewModel
Auto Import 가 안되는 이유도 모르겠고, 많은 사람들이 같은 문제를 겪고 있는 듯 하였다.
Koin 레포의 Issue 게시판을 둘러보면 AndroidX 패키지들 중 네임 스페이스가 무언가 겹치는 현상이 발생하는 듯 하다.
자세히는 모르겠지만, Koin 에서 확실히 이를 개선해주면 좋을 것 같다.
답글에는 모두들 Androidx, Koin 버전을 Legacy 로 변경하면 해결된다고 하는데, 적절한 답변은 아닌 듯 하다. (심지어 해결되지도 않는다.)
허무하게 해결되었으나, 아무튼 해결되어서 다행이다. 같은 문제로 구글과 사투 중인 사람들을 위해 이 글을 남기게 되었다.
하지만 Gradle 버전, 환경에 따라 이 글 또한 도움이 되지 않을 수 있으니 맹신하지 않는 게 좋을 것 같다.
+ 참고) 사용 중인 AndroidX 라이브러리, Koin 라이브러리 버전들
'안드로이드 코딩일지' 카테고리의 다른 글
[Android] WorkManager 'Could not instantiate Worker' 해결법 (0) | 2021.02.24 |
---|---|
[Android] 안드로이드 10 이상 기기에서 클립보드 액세스가 안될 때 (1) | 2021.02.20 |
[Android] RecyclerView 의 순서가 재구성될 때 ImageView 가 사라지는 이유는? (0) | 2021.01.20 |