Koin
원티드나 로켓펀치로 내가 일할 곳은 어디인가 하는 마음으로 경건히 안드로이드 개발자 구직 글을 보다 보면 우대조건에 mvp,mvvm,di,rxjava는 거의 고정이다. (경력은 자격요건에 다 요구)
mvvm을 제외하고 개념은 대강 알고 있지만 코드만 봐도 현기증이 나서 기피해 왔는데, 나도 먹고 살아야 하지 않겠는가? rxjava보단 di가 접근하기 더 쉬워 보여서 구글링을 통해 di에 관한 글과 di framework 중 유명한 dagger2와 koin에 관한 글을 읽기 시작했다.
- dagger2
2일을 봤다. dagger 사이트에 있는 coffeeMaker도 코드 안보면 지금도 못 짤거 같다. 먼놈의 어노테이션이 그렇게 많은지 간단한 예제라도 만들고 싶은 입장으로써 2일 차에 바로 손절했다.
- Koin
사이트를 가도 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은 그 정돈 아니더랑
Author And Source
이 문제에 관하여(Koin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kcj351/Koin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)