원티드나 로켓펀치로 내가 일할 곳은 어디인가 하는 마음으로 경건히 안드로이드 개발자 구직 글을 보다 보면 우대조건에 mvp,mvvm,di,rxjava는 거의 고정이다. (경력은 자격요건에 다 요구)
mvvm을 제외하고 개념은 대강 알고 있지만 코드만 봐도 현기증이 나서 기피해 왔는데, 나도 먹고 살아야 하지 않겠는가? rxjava보단 di가 접근하기 더 쉬워 보여서 구글링을 통해 di에 관한 글과 di framework 중 유명한 dagger2와 koin에 관한 글을 읽기 시작했다.
2일을 봤다. dagger 사이트에 있는 coffeeMaker도 코드 안보면 지금도 못 짤거 같다. 먼놈의 어노테이션이 그렇게 많은지 간단한 예제라도 만들고 싶은 입장으로써 2일 차에 바로 손절했다.
사이트를 가도 dagger랑 문서 길이부터 차이가 난다.
설명도 길지 않다.
대충 읽어보다 dagger의 예제인 coffeeMaker를 koin.ver로 수정했다.
class A_Heater :Heater {
override fun on() {
Log.d(ContentValues.TAG, "Heater on")
}
override fun off() {
Log.d(ContentValues.TAG, "Heater oFF")
}
override fun isHot():Boolean {
return true
}
}
interface Heater {
fun on()
fun off()
fun isHot():Boolean
}
class A_Pump(private val heater: A_Heater) : Pump{
override fun pump() {
if (heater.isHot()){
Log.d(ContentValues.TAG, "커피콩 펌프 되는중")
}
}
}
interface Pump {
fun pump()
}
val appModule :Module = module{
single { A_Heater()}
single { A_Pump(get()) }
factory { CoffeeMaker( get(), get() ) }
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val coffeeMachine1 by inject<CoffeeMaker>()
coffeeMachine1.brew()
}
class myApp : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidLogger()
androidContext(this@myApp)
modules(listOf(appModule))
}
}
}
결과값
class myApp 이 부분 없이 MainActivity에서 startKoin해도 실행은 잘된다 왜 굳이 저렇게 나눠서 하는지 이유를 알아볼 예정이다.
나처럼 dagger2가 어렵다면 koin을 써보는 건 어떨까 싶다.
추가로 dagger2는 나온 지 오래된 만큼 예제가 많다, 근데 koin은 그 정돈 아니더랑