#1 ์ด์ ๊ธ
[Android] Dagger2 - ๊ธฐ์ด
#1 ์ด์ ๊ธ ์์กด์ฑ ์ฃผ์ (Dependency Injection)#1 ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ด๋?#1-1 Dependent์ Dependencyfun main() { val car = Car() car.startCar() } class Car { private val engine = Engine() private val airbag = Airbag() private
kenel.tistory.com
์ ๊ฒ์๊ธ์ ์์ฑ๋ ์ฑ์ ์ผ๋ถ ์์ ํด์, Interface๋ฅผ Dependency๋ก ์ฃผ์ ํด๋ณธ๋ค.
#2 ์ฝ๋ ์์ - ์ง๊ด์ ์ธ ๋ฒ์
#2-1 ๊ฐ์
[Android] Dagger2 - ๋งค๊ฐ๋ณ์
#1 ์ด์ ๊ธ [Android] Dagger2 - @Provides#1 ์ด์ ๊ธ [Android] Dagger2 - ๊ธฐ์ด#1 ์ด์ ๊ธ ์์กด์ฑ ์ฃผ์ (Dependency Injection)#1 ์์กด์ฑ ์ฃผ์ (Dependency Injection)์ด๋?#1-1 Dependent์ Dependencyfun main() { val car = Car() car.startCar
kenel.tistory.com
์ ๊ฒ์๊ธ์ ์ฑ์ ๊ตฌํํ ์ค ์๋ค๋ฉด, ์ฌ์ด ๊ตฌํ ๋ฐฉ์์ด๋ค. Battery ํด๋์ค๋ฅผ ์ธํฐํ์ด์ค๋ก ๋ฐ๊พธ๊ณ , ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ EcoFriendlyBattery ํด๋์ค๋ฅผ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ EcoFriendlyBattery๋ฅผ Dependency๋ก ๋ฐ๊ณ , Battery๋ฅผ ํ์๋ก ํ๋ Dependent์๊ฒ ๋ฐํํ๋ @Provides ๋ฉ์๋๋ฅผ ๋ง๋ค๋ฉด ๋์ด๋ค. ๋ณธ ๊ฒ์๊ธ์์ @Component.Builder๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์๋๋ฐ, ์๋ํ๋ฉด ์๋์ ๋์ ์๋ ์์กด์ฑ ๊ทธ๋ํ์์ ๋ณด๋ฏ, @Provides ๋ฉ์๋๊ฐ ์๊ตฌํ๋ Dependency๊ฐ @Inject์ ์ํด ์๋ ์ฃผ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
#2-2 ์์กด์ฑ ๊ทธ๋ํ

์ด ๊ฒฝ์ฐ์ ์์กด์ฑ ๊ทธ๋ํ๋ค.
#2-3 Battery.kt ์์
// package com.example.interfacedependency
interface Battery {
fun startBattery()
}
#2-4 EcoFriendlyBattery.kt ์์ฑ
// package com.example.interfacedependency
import android.util.Log
import javax.inject.Inject
class EcoFriendlyBattery @Inject constructor() : Battery {
override fun startBattery() {
Log.i("interfacer_han", "${this::class.simpleName} is ready")
}
}
#2-5 @Module ํด๋์ค ๋ฐ @Provide ๋ฉ์๋ ์์ฑ
// package com.example.interfacedependency
import dagger.Module
import dagger.Provides
@Module
class BatteryModule {
@Provides
fun providesEcoFriendlyBattery(ecoFriendlyBattery: EcoFriendlyBattery): Battery {
return ecoFriendlyBattery
}
}
#2-6 @Component์ @Module ๋ฑ๋ก
// package com.example.interfacedependency
import dagger.Component
@Component(modules = [BatteryModule::class])
interface CarComponent {
fun getCar(): Car
}
#2-7 ์๋ ํ์ธ (๋ก๊ทธ ๋ฉ์์ง)
Crankshaft is ready
Cylinder is ready
Piston is ready
Engine is ready
Airbag is ready
EcoFriendly
Battery is ready
Car is ready
#3 ์ฝ๋ ์์ - @Binds ์ฌ์ฉ
#3-1 ๊ฐ์
@Binds ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด #2๋ฅผ ์์ ํด๋ณธ๋ค. @Binds๋ dagger์์ ์ธํฐํ์ด์ค์ ๊ทธ ๊ตฌํ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ชฉ์ ์ ๊ฐ์ง๋ค. ์ด ์ด๋ ธํ ์ด์ ์ ํตํด ํ๋ก๊ทธ๋๋จธ๋ ํน์ ์ธํฐํ์ด์ค ํ์ ์ธ Dependency๋ฅผ ์ด๋ค ๊ตฌํ์ฒด๋ก ์ ํ ์ง ๋ช ์ํ ์ ์๋ค.
#3-2 ์์กด์ฑ ๊ทธ๋ํ

#2-2์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ค. ๊ตฌํ ๋ฐฉ์์ด ๋ ๊ฐ๊ฒฐํด์ก์ ๋ฟ์ด๋ค.
#3-3 BatteryModule.kt ์์
...
@Module
abstract class BatteryModule {
@Binds
abstract fun bindsEcoFriendlyBattery(ecoFriendlyBattery: EcoFriendlyBattery): Battery
}
/*
@Module
class BatteryModule {
@Provides
fun providesEcoFriendlyBattery(ecoFriendlyBattery: EcoFriendlyBattery): Battery {
return ecoFriendlyBattery
}
}
*/
#2์ ์์ ํ ๋๊ฐ์ด ์์ ํ๋, BatteryModule.kt๋ง ์์ ๊ฐ์ด ๋ฐ๊พผ๋ค. @Binds ์ด๋ ธํ ์ด์ ์ ์ค๊ณ์ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ฐ๋์ ์ถ์ ๋ฉ์๋์ ๋ถ๋๋ค. ์ด์งธ์์ผ๊น? @Binds๋ ์ด๋ฆ ๊ทธ๋๋ก Binding์ด ๋ชฉ์ ์ด๊ธฐ์, ์ค์ ๋ก ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐํํ๋ ๋น(้)์ถ์ ๋ฉ์๋์ ํจ๊ปํ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ ์๋๋ผ, ์ด๋ฏธ ์์ฑ๋ ๊ฐ์ฒด(์ฌ๊ธฐ์๋ EcoFriendlyBattery)๋ฅผ (Battery์) ๋ฐ์ธ๋ฉํ๋ ๊ฒ @Binds ๋ฉ์๋์ ์ญํ ์ด๋ค.
๋, ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ธฐ ์ํด์ ์ถ์ ํด๋์ค์ฌ์ผํ๋ฏ๋ก @Module ํด๋์ค๋ฅผ ์ถ์ ํด๋์ค๋ก ๋ง๋ ๋ค. dagger ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฌํ ์ถ์ @Module ํด๋์ค ์์๋ ๋ฐ๋์ @Binds ์ถ์ ๋ฉ์๋๊ฐ ์์ ๊ฑฐ๋ผ๊ณ ์ธ์ํ๊ณ ์ ์ ํ ์ฒ๋ฆฌํ๋ค.
#3-4 ์๋ ํ์ธ (๋ก๊ทธ ๋ฉ์์ง)
Crankshaft is ready
Cylinder is ready
Piston is ready
Engine is ready
Airbag is ready
EcoFriendly
Battery is ready
Car is ready
#4 ์์ฝ
@Binds๋ ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๋ฅผ ์์กด์ฑ ์ฃผ์ ํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์ด๋ค.
#5 ์์ฑ๋ ์ฑ
android-practice/dagger2/InterfaceDependency at master ยท Kanmanemone/android-practice
Contribute to Kanmanemone/android-practice development by creating an account on GitHub.
github.com
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Dagger2 - Application ํ์ฉํ๊ธฐ (0) | 2024.06.25 |
---|---|
[Android] Dagger2 - Activity์ Dependency ์ฃผ์ (0) | 2024.06.25 |
[Android] Dagger2 - ๋งค๊ฐ๋ณ์ ๋์ ํ ๋น (0) | 2024.06.24 |
[Android] Dagger2 - @Provides (0) | 2024.06.24 |
[Android] Dagger2 - ๊ธฐ์ด (0) | 2024.06.24 |