๋ชฉ์ฐจ
1๏ธโฃHilt Application class
- Application ๋?
์ ์ญ ์ดํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํ ๋ฒ ์ด์ค๊ฐ ๋๋ ํด๋์ค๋ฅผ ๋งํ๋ค.
์๋๋ก์ด๋์์ application์ ๋ชจ๋ ์กํฐ๋นํฐ๋ ์๋น์ค์ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๊ณ ์๋ ์๋๋ก์ด๋ ๋ด์์ ๊ธฐ๋ณธํด๋์ค์ด๋ค.
Application ํด๋์ค ๋๋ Application ํด๋์ค์ ํ์ ํด๋์๋ ๋ค๋ฅธ ํด๋์ค๋ณด๋ค ๋จผ์ ์ธ์คํด์คํ๋๋ค
Hilt๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฑ์ @HiltAndroidApp์ผ๋ก ์ฃผ์์ด ์ง์ ๋ Application ํด๋์ค๋ฅผ ํฌํจํด์ผํ๋ค.
1. ์ด ์ด๋ ธํ ์ด์ ์ Application์ ์ ์ฉํ๋ฉด ํด๋น ํด๋์ค๊ฐ Hilt์์ ์ฌ์ฉํ๋ Application์ ๊ธฐ๋ณธ ํด๋์ค ์ญํ ์ ํ๊ฒ ๋๋ค.
2. Application ํด๋์ค๋ ์์กด์ฑ ์ฃผ์ ์ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ปจํ ์ด๋๋ฅผ ์ค์ ํ๊ณ ์ด๊ธฐํํ๋๋ฐ ํ์ํ ์ฝ๋๋ฅผ ํฌํจํ๋ค.
์์ฑ๋ ์ด Hilt ๊ตฌ์ฑ ์์๋ Application ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์ฐ๊ฒฐ๋๋ฉฐ ๊ด๋ จํ ์ข ์ํญ๋ชฉ์ ์ ๊ณตํ๋ค.
๋ํ ์ด Hilt ๊ตฌ์ฑ ์์๋ ์ฑ์ ์์ ๊ตฌ์ฑ์์์ด๋ฏ๋ก ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ์ด Application์์ ์ ๊ณตํ๋ ์ข ์ ํญ๋ชฉ์ ์ก์ธ์คํ ์ ์๋ค.
- ์ปจํ ์ด๋๋?
์ปจํ ์ด๋๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
์ปจํ ์ด๋์๋ ์ฌ๋ฌ ์ ํ์ด ์๋๋ฐ ์์กด์ฑ ์ฃผ์ ์ปจํ ์ด๋๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ฃผ์ ํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ฐ๋ฆฌ ์ฝ๋ ์ดํด๋ณด๊ธฐ
@HiltAndroidApp
class App : Application() {
2๏ธโฃAndroid ํด๋์ค์ ์ข ์ ํญ๋ชฉ ์ฝ์
Application ํด๋์ค์ Hilt๋ฅผ ์ค์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๊ตฌ์ฑ์์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด
-> Hilt๋ @AndroidEntryPoint ์ฃผ์์ด ์๋ ๋ค๋ฅธ Android ํด๋์ค์ ์ข ์ ํญ๋ชฉ์ ์ ๊ณตํ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ ์์
์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ์์กด์ฑ์ ๊ด๋ฆฌํ๋๋ฐ ํ์ํ ์ค์ ์ ํฌํจํ๋ค.
1. Application ํด๋์ค : ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์ด๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ ๊ณต์ ๋๋ ์ค์ ์ด๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
2. Application ๋ชจ๋ : ์์กด์ฑ ์ฃผ์ ์ ์ํด ํ์ํ ๊ฐ์ฒด๋ค์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ชจ๋์ด๋ค. ๋คํธ์ํฌ ๋ชจ๋์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ ..
3. Application ์ปดํฌ๋ํธ : ์์กด์ฑ ์ฃผ์ ์ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ์์กด์ฑ์ ์ฃผ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์ฝ๋
@AndroidEntryPoint
class MenuDusplayActivity : AppCompatActivity() {
@Inject lateinit var breakfastProvider : BreakfastMenuDataProvider
...
}
Android ํด๋์ค์ @AndroidEntryPoint๋ก ์ฃผ์์ ์ง์ ํ๋ฉด ์ด ํด๋์ค์ ์ข ์๋ Android ํด๋์ค์๋ ์ฃผ์์ ์ง์ ํด์ผํ๋ค.
์๋ฅผ ๋ค์ด ํ๋๊ทธ๋จผํธ์ ์ฃผ์์ ์ง์ ํ๋ค๋ฉด ์ด ํ๋๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ํ๋์๋ ์ฃผ์์ ์ง์ ํด์ผํ๋ค.
@AndroidEntryPoint๋ ํ๋ก์ ํธ์ ๊ฐ Android ํด๋์ค์ ๊ดํ ๊ฐ๋ณ Hilt ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ค.
์ด๋ฌํ ๊ฐ๋ณ Hilt ๊ตฌ์ฑ์์๋ ํด๋นํ๋ ๊ฐ ์์ ํด๋์ค์์ ์ข ์ ํญ๋ชฉ์ ๋ฐ์ ์ ์๋ค.
@ AndroidEntryPoint ์ ๊ฐ๊ฐ์ Android ํด๋์ค์ ๋ํด Hilt ๊ตฌ์ฑ์์๋ฅผ ์์ฑํด์ค๋ค.
์ฆ ๊ฐ Android ํด๋์ค๊ฐ Hilt์ ์์กด์ฑ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค!
- ๊ตฌ์ฑ์์๋ ์์กด์ฑ ์ฃผ์ ์ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. Dagger๋ ์์กด์ฑ์ ์ ๊ณตํ๋ ๊ฐ์ฒด์ ์ด๋ฅผ ์์ฒญ๋ฐ๋ ๊ฐ์ฒด ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค.
- Hilt ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ : ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ์ปดํฌ๋ํธ์ ์กํฐ๋นํฐ, ํ๋๊ทธ๋จผํธ, ์๋น์ค ๋ฑ์ Android ๊ตฌ์ฑ ์์๋ง๋ค ํ์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค. ์ด๋ฌํ ๊ณ์ธต ๊ตฌ์กฐ์์ ๊ฐ ํ์ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ์์ ์ข ์ํญ๋ชฉ์ ๋ฐ์ ์ ์๋ค.
์ฆ AndroidEntryPoint๋ฅผ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ด ํด๋์ค๋ Hilt์์ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ๋ก ๊ฐ์ฃผ๋๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํ ์ ์๋ค.
AndroidEntryPoint์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ์ ํ๋๋ก ์ ์ธ๋ ๊ฐ์ฒด์ Inject ์ด๋ ธํ ์ด์ ์ด ์๋ค๋ฉด Hilt๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ ํ์ํ ์์กด์ฑ์ ์ฃผ์ ํด์ค๋ค!
์ฆ ์ง๊ธ ์กํฐ๋นํฐ์์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
3๏ธโฃHilt binding (๊ฒฐํฉ) ์ ์ : Hilt๊ฐ ํ์ํ ์ข ์ํญ๋ชฉ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
ํ๋ ์ฝ์ ์ด๋ ๊ฐ์ฒด์ ํ๋์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
- ํด๋์ค์์ ํ๋๋ ํด๋์ค์ ํฌํจ๋ ๋ณ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค!
binding ๊ฒฐํฉ์ ํน์ ์ ํ์ ์ธ์คํด์ค๋ฅผ ์ข ์ํญ๋ชฉ์ผ๋ก ์ ๊ณตํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
์์ฑ์ ์ฝ์
: ํด๋์ค์ ์์ฑ์์์ @Inject ์ฃผ์์ ์ฌ์ฉํ์ฌ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ Hilt์๊ฒ ์๋ฆฐ๋ค.
class MenuDisplayActivity @Inject constructor(
private val breakfastProvider : BreakfastProvider
)
{ ... }
4๏ธโฃHilt ๋ชจ๋
์์ฑ์ ์ฝ์ ์ ํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
1. ์ธํฐํ์ด์ค
2. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค
์ด๋ฐ ๊ฒฝ์ฐ Hilt ๋ชจ๋์ ์ฌ์ฉํ์ฌ Hilt์ ๋ฐ์ธ๋ฉ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋ค.
Hilt ๋ชจ๋์ @Module๋ก ์ฃผ์์ด ์ง์ ๋ ํด๋์ค์ด๋ค.
Hilt ๋ชจ๋์ @InstallIn ์ฃผ์์ ์ฌ์ฉํ์ฌ ๊ฐ ๋ชจ๋์ ์ฌ์ฉํ๊ฑฐ๋ ์ใน์นํ Android ํด๋์ค๋ฅผ Hilt์ ์๋ ค์ผํ๋ค.
Hilt ๋ชจ๋์ ์ ๊ณตํ๋ ์ข ์ ํญ๋ชฉ์ Hilt ๋ชจ๋์ ์ค์นํ๋ Android ํด๋์ค์ ์ฐ๊ฒฐ๋๋ค.
์๋ฅผ ๋ค์ด์ ์ดํดํด๋ณด์!!!
Menu๋ฅผ ๋ณด์ฌ์ฃผ๋ Class์ ๊ทธ ํด๋์ค์ ์์นจ ๋ฉ๋ด๋ฅผ ์ ๋ฌํด์ฃผ๋ Breakfast ํด๋์ค๊ฐ ์๋ค๊ณ ํด๋ณด์.
class Menu {
}
class BreakfastProvider {
fun provideBreakfast() :String {
return "๊ณ๋ ํ๋ผ์ด์ ํ ์คํธ"
}
5๏ธโฃ@Binds๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์ค์ ์ธ์คํด์ค ์ฝ์
์ธํฐํ์ด์ค๋ ์์ฑ์ ์ฝ์ ์ ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ์๋ @Binds๋ก ์ฃผ์์ด ์ง์ ๋ ์ถ์ํจ์๋ฅผ ์์ฑํ์ฌ ๋ฐ์ธ๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋ค.
@Binds ์ฃผ์์ ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํด์ผํ ๋ ์ฌ์ฉํ ๊ตฌํ์ Hilt์ ์๋ ค์ค๋ค.
1. ํจ์ ๋ฐํ ์ ํ์ ํจ์๊ฐ ์ด๋ค ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋์ง Hilt์ ์๋ ค์ค๋ค.
2. ํจ์ ๋งค๊ฐ๋ณ์๋ ์ ๊ณตํ ๊ตฌํ์ Hilt์ ์๋ ค์ค๋ค.
@interfact MealService{
fun getMealMethods()
}
class MealServiceImpl @Inject constructor(
...
) : MealService {...}
@Binds
abstract fun bindMealService(
mealSerivceImpl : MealServiceImpl // ์ ๊ณตํ ๊ตฌํ์ Hilt์๊ฒ ์๋ ค์ค๋ค.
) : MealService // ํจ์๊ฐ ์ด๋ค ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋์ง Hilt์๊ฒ ์๋ ค์ค๋ค.
6๏ธโฃ@Provides๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์ฝ์
ํด๋์ค๊ฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ํด๋์ค๋ฅผ ์์ ํ์ง ์์ Retrofit์ด๋ OkHttpClient ๋๋ ๋น๋ ํจํด์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ ์์ฑ์ ์ฝ์ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
1. ํจ์ ๋ฐํ ์ ํ : ํจ์๊ฐ ์ด๋ค ์ ํ์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋์ง Hilt์ ์๋ ค์ค๋ค.
2. ํจ์ ๋งค๊ฐ๋ณ์ : ํด๋น ์ ํ์ ์ข ์ ํญ๋ชฉ์ Hilt์ ์๋ ค์ค๋ค.
3. ํจ์ ๋ณธ๋ฌธ: ํด๋น ์ ํ์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ Hilt์ ์๋ ค์ค๋ค.
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ซAndroid ๋ก๊ทธ์ธ ํ ํฐ ์ ์ฅ : Proto Datastore ์ ์ฉํ๊ธฐ (0) | 2024.03.15 |
---|---|
Android ๋คํธ์ํฌ ํต์ ๊ฐ๋ ์ตํ๊ธฐ [REST,URL, URI, Retrofit] (0) | 2024.03.05 |
[android ๋ก๊ทธ์ธ] jwt token์ผ๋ก ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์์ฑํ๊ธฐ (0) | 2024.02.15 |
Android ์ข ์ํญ๋ชฉ ์ฝ์ ์์๋ณด๊ธฐ 1ํ (1) | 2024.02.07 |
android์์ ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐ๋ํ๊ธฐ (1) | 2024.02.03 |