우선, 라이브러리 적용이 필요합니다 (dagger, hilt)
[versions]
//...
daggerVersion = "2.48"
hiltVersion = "1.2.0"
retrofitVersion = "2.9.0"
gsonVersion = "2.10.1"
[libraries]
//...
dagger-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "daggerVersion" }
hilt-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltVersion" }
androidx-gson = { group = "com.google.code.gson", name = "gson", version.ref = "gsonVersion" }
androidx-retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofitVersion" }
androidx-gson-converter = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofitVersion" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "daggerVersion" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt" }
hilt-android = { id = "com.google.dagger.hilt.android"}
build.gradle
의존성주입을 통해 network를 설정하고 github api를 사용해봅시다
1. hilt에서 제일 처음해줘야 할 Application을 설정합니다
Manifest에 application을 생성한 클래스의 name으로 변경해줘야합니다
@HiltAndroidApp
class MainApplication: Application() {
}
2. Module을 설정합니다
Module : 의존성 주입을 하고 있는 provider가 있는 곳 즉, Hilt는 모듈을 통해 "이 클래스에 필요한 것은 이거야!"라고 알게 되고, 자동으로 필요한 객체를 주입
@InstallIn(SingletonComponent::class)
@Module
class MainModule {
@Singleton
@Provides
@Named("API_URI")
fun provideApiUri(): String = "https://api.github.com/"
//provide명은 전혀 중요하지 않다, 같은 타입이 여러개 있을 수 있으니 @Named 셋팅
@Singleton
@Provides
fun provideGson(): Gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
//gson, retrofit match
@Singleton
@Provides
fun provideConverterFactory(): Converter.Factory = GsonConverterFactory.create()
@Singleton
@Provides
fun provideRetrofit(@Named("API_URI") apiUri: String, converterFactory: Converter.Factory): Retrofit =
Retrofit.Builder().baseUrl(apiUri).addConverterFactory(converterFactory).build()
@Singleton
@Provides
fun provideGithubService(retrofit: Retrofit): GithubService =
retrofit.create(GithubService::class.java)
}
3. viewModel을 생성합니다
@HiltViewModel
class MainViewModel @Inject constructor(
private val apiService: GithubService
): ViewModel() {
val repositorys = mutableStateListOf<Repository>()
fun getRepository() {
repositorys.clear()
viewModelScope.launch {
repositorys.addAll(apiService.getUsersRepos("eunie9498"))
}
}
}
'🤖 Compose' 카테고리의 다른 글
[Compose] 안정성 stability (0) | 2025.02.09 |
---|---|
[Compose] Rendering (0) | 2025.01.31 |
[Compose] Compose의 LifeCycle (0) | 2025.01.27 |
[Compose] 단방향 데이터 흐름 (0) | 2025.01.23 |
[Compose] Navigation (0) | 2025.01.22 |