[TIL] ๐ผ24/04/27๐ผ#Hilt @Binds @Provides
Hilt @Binds @Provides
๐์ฐธ๊ณ ์๋ฃ
- Hilt๋ฅผ ์ฌ์ฉํ ๋ ํ๋ก์ ํธ ๋ด์์ constructor๋ฅผ ํตํด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ, ๋ฐ๋ก ์ข
์์ฑ์ ์ ๊ณตํ ์ ์์ (= constructor-injection)
-> ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ, Hilt Module์ ์ถ๊ฐํ์ฌ ์ข
์์ฑ์ ์ ๊ณตํด์ผ
- Hilt Module์ ํตํด ์ ๊ณตํด์ผ ํ๋ ์ข
์์ฑ์ ์ข
๋ฅ์ ๋ฐ๋ผ
@Binds
๋๋ @Provides
์ฌ์ฉ
@Binds
- ์ธํฐํ์ด์ค์ ๋ํ ์ข
์์ฑ ์ฝ์
์ ์ฌ์ฉ
- abstract class ๋ชจ๋ ์์ abstract function ์ ์
- ํจ์ return ํ์
: ์ ๊ณตํ๋ ์ธ์คํด์ค์ ์ธํฐํ์ด์ค
- ํจ์ parameter: Hilt๊ฐ ์ ๊ณตํ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด
@Module
@InstallIn(ViewModelComponent::class)
abstract class RepositoryModule {
@Binds
abstract fun bindsItemRepository(repositoryImpl: ItemRepositoryImpl): ItemRepository
}
@Provides
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๋ ํด๋์ค์ด๋ฏ๋ก ํ๋ก์ ํธ ๋ด์์ ์์ ํ ์ ์๋ ๊ฒฝ์ฐ/Builder ํจํด์ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- object ๋ชจ๋ ์์ function ์ ์
- ํจ์ return ํ์
: ์ ๊ณตํ๋ ์ธ์คํด์ค์ ํ์
- ํจ์ parameters: ํด๋น ํ์
์ ์ข
์์ฑ
- ํจ์ body: ์ ๊ณตํ๋ ์ธ์คํด์ค ์์ฑ ๋ฐฉ๋ฒ, Hilt๊ฐ ํด๋น ํ์
์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํด์ผํ ๋๋ง๋ค ์คํ๋จ
@Module
@InstallIn(SingletonComponent::class)
object RemoteSourceModule {
@Singleton
@Provides
fun provideKakaoSearchApi() = KakaoSearchRetrofit.kakaoSearchApi
}
@Provides
๋ง ํฌํจ๋๋ Module์ ๊ฒฝ์ฐ object๋ก ์์ฑ
-> providers get optimized & almost in-lined in generated code