개발 시에 구조를 유연하게 만드는 방법은 다양하다. 그중 오늘 맛보기를 사용할 주제와 관련된 Dependency Injection (이하 DI)
또한 많이 사용하는 패턴 중 하나이다. Android 개발에서는 DI
를 하는 방법으로 코드를 작성하는 사람이 직접 관리와 주입을 하는 방법도 있다. 나의 시간은 소중하기 때문에 많이 알려진 Dagger과 Koin, Kodein 등을 사용해서 DI를 이용한다.
DI의 필요성은 이미 다양한 곳에서 언급되었다. OOP에서 이야기하는 SOLID 또한 어디선가 들어본 내용이다. 그리고 올해 열린 Android Dev Summit 2019에서도 DI 관련에 세션이 있었으며, Android Developer 가이드에도 관련 문서가 추가되었다.
※ An Opinionated Guide to Dependency Injection on Android (Android Dev Summit ‘19) ※ Android Developers ~ Dependency injection
위에서 언급한 DI들은 모두 장단점이 존재하며 적절한 사용이 필요하다. 그렇지만 프로젝트는 점점 커지며 복잡함이 늘어나는 것이 일이라는 것이다. 현재 Google에서 Android 개발자에게 DI를 어떻게 선택할지에 대한 제안하는 방법은 아래와 같다. (Dagger가 많이 보이는 것은 기분 탓일 것이다)
Image Source : https://developer.android.com/training/dependency-injection#choosing-right-di-tool
간단하게 DI에 대해 언급했지만, 왜 Scabbard와 무슨 상관이 있는가에 대한 의문이 있을 것이다. Scabbard는 위에서 보이는 Dagger 작업 시 도움이 되는 라이브러리이다.
Dagger의 장점도 다양하지만, 항상 언급되는 단점으로는 아래와 같다.
위의 단점 중 구조 파악의 어려움
을 해결할 방법으로 며칠 전 공개된 Scabbard 이다. Scabbard 는 Dagger에서 DI가 어떻게 연결되었는가를 이미지 형태로 결과를 알 수 있는 라이브러리이다.
scabbard 공식 사이트 : https://arunkumar9t2.github.io/scabbard/configuration/
Android Dev Summit 2019 소스를 이용해서 Scabbard를 적용해봤을 때 아래의 결과를 이미지 형태로 얻을 수 있다.
AppComponent Dagger Graph
MainActivity Dagger Graph
Scabbard는 GraphViz를 이용해서 그래프 이미지를 생성하므로, 각자의 개발환경에 맞게 설치하면 된다.
brew install graphviz
.sudo apt-get install graphviz
.Android Project에 Dagger 포함은 당연한 이야기이다.
Android Studio의 plugin market을 이용해 Scabbard plugin을 설치한다.
Preferences | Plugins
Scabbard Plugin Site Link : https://plugins.jetbrains.com/plugin/13548-scabbard–dagger-2-visualizer/
Plugin DSL 사용 시는 아래와 같이 적용한다.
buildscript {
...
repositories {
jcenter()
...
}
}
plugins {
id "scabbard.gradle" version "0.1.0"
}
allprojects {
...
}
Gradle plugin DSL 형태로 적용이 되지 않는 경우에는 아래의 구버전 대응용으로 사용할 수 있다.
buildscript {
...
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
...
}
dependencies {
classpath "gradle.plugin.dev.arunkumar:scabbard-gradle-plugin:0.1.0"
...
}
}
Scabbard의 기능을 활성화하는 옵션을 적용한다.
apply plugin: "scabbard.gradle"
android {
...
}
scabbard {
enabled true
failOnError true // default false
fullBindingGraphValidation true // default false
}
현재 Android Dev Summit 2019에 fullBindingGraphValidation 적용시 Graph 이미지는 제대로 생성되지만, 빌드 에러가 발생한다.
테스트로 Dagger Sample에 있는 CoffeeMaker 소스를 Android Studio에 적용해 봤다.
Source : https://github.com/google/dagger
모든 설정을 적용한 후 Compile Build 후 7번 라인에 보이는 아이콘이 노출된다. 아이콘을 클릭하면 현재 Component
에서 파악할 수 있는 Module Graph를 얻을 수 있다.
Scabbard를 통해서 생성된 이미지는 build-tmp-kapt3-classes-debug-패키지명 아래에 존재한다.
추가로 Android Dev Summit 2019에 적용해보면 아래와 같이 형태의 Graph를 얻을 수 있다
0.0.1
버전으로 명시해놨지만, 현재는 0.1.0
버전이 최신이다.
사실 이것 때문에 엄청 고생했다. 공식 문서대로 했지만, 빌드 실패를 경험했지만 버전만 제대로 반영하면 문제없이 동작한다.0.1.0
버전이니 여러모로 기대되는 라이브러리이다.
comments powered by Disqus
Subscribe to this blog via RSS.
LazyColumn/Row에서 동일한 Key를 사용하면 크래시가 발생하는 이유
Posted on 30 Nov 2024