๐Ÿค” ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€?

๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด์„ ๋งํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ„ ์˜์กด์„ฑ์ด ๊ฐ•ํ•œ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ํด๋ž˜์Šค ๊ฐ„ ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

์˜์กด์„ฑ?

์•„๋ž˜ ๊ฒฝ์šฐ๋Š” A ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ B ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ, ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์˜์กด๊ด€๊ณ„๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

class B{
    val id = "test"
}
class A {
    val data = B()  //์˜์กด๊ด€๊ณ„
}
print(A().data.id)

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ๋Š” A ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฃผ์ž…์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

class B {
    val id = "test"
}

class A(b: B) {
    val data = b
}

val b = B() //์™ธ๋ถ€์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ
print(A(b).data.id) //์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…

๐Ÿ˜Š Hilt

๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Application Class

Hilt๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์€ Application Class์— @HiltAndroidApp ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ์ด๋Š” ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‹œ์ž‘ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

@HiltAndroidApp
class HiltApplication : Application() {
}

Manifest ํŒŒ์ผ์—์„œ๋„ android name ์†์„ฑ์œผ๋กœ ํ•ด๋‹น ํด๋ž˜์Šค ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

<application
    android:name=".di.HiltApplication"

AndroidEntryPoint