๋ค์ด๊ฐ๊ธฐ ์ ์
ํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ di๋ฅผ ์ ์ฉํด๋ณด๋ ๊ณผ์ ์ ๊ธฐ๋กํ๊ณ ์๋ค. ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์์ ํ ๋ค ๊ตฌํํ๋ ๊ทธ๋ ๊น์ง ๊ณ์ ๊ธฐ๋ก์ ํด๋ณด๊ฒ ๋ค!

Day 1๏ธโฃ
module์์ ์ ์ํ ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฅธ ํด๋์ค์์ ์ฌ์ฉํ ๊น?์ ๋ํ ์๋ฌธ์ ๋๋์ด ํด๊ฒฐํ์๋ค.
์์ ๊ทธ ๋ชจ๋ธ GoogleAuthModule.provide( ) ํ์์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ์๋ค...
@Provides
@ActivityScoped
fun provideCredentialManager(
@ActivityContext context: Context,
): CredentialManager {
return CredentialManager.create(context)
}
์ด๋ ๊ฒ ์ ์ํ CredentialManager์ ๊ฐ์ฒด๋ ๊ฐ๋จํ ํ๋ ์ฝ์ ์ ํตํด ์ฌ์ฉํ ์ ์์๋ค. credentialManager๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์์ฑ์ ์ฝ์ ์ ํตํด์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ ํ ์ ์์๋ค.
@Inject
lateinit var credentialManager: CredentialManager
* ์์ฑ์ ์ฝ์ ์ ํ ์ ์๋ ๊ฒฝ์ฐ
- ์ธํฐํ์ด์ค
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค์ ๊ฐ์ ์์ ํ์ง ์์ ์ ํ : Retrofit์ด๋ OkHttpClient
Day 2๏ธโฃ
- activityContext๋ฅผ hilt๋ฅผ ํตํด ์ฃผ์ ํ๊ธฐ ์ํด์๋ SingletonComponenet๊ฐ ์๋ ActivityComponent๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ ์์๋ค.
- ๊ธฐ์กด์๋ SingletonComponent::class๋ฅผ InstallIn ํ ํ ActivityContext๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํด์ ๊ณ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค
- di module ์ ์ ์ ์ด๋
ธํ
์ด์
์ดํด
- @Module์ ์ญํ : di ์ปจํ ์ด์ ์ข ์์ฑ์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค : ๋ชจ๋์ ์ ์
- @InstallIn์ ์ญํ : ๋ชจ๋์ ์ด๋์ ์ค์นํ ์ง ์ง์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค : ๋ชจ๋์ ์ค์น
- Singleton : ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ค ์ฆ ์ฌ๊ธฐ์ ์๊ธด ๊ฐ์ฒด๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋ ๋๊น์ง ์ญ ์กด์ฌํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ , ๋คํธ์ํฌ ์บ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฑ์ ์ฌ์ฉ๋๋ค
- Activity Scope : ๊ฐ ์กํฐ๋นํฐ์ ๋ณ๋์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ค. Activity Scope์์ ์์ฑ๋ ๊ฐ์ฒด๋ ํด๋น Activity๊ฐ ์ข ๋ฃ๋ ๋๊น์ง๋ง ์กด์ฌํ๋ค.
- ์ ์ฒด ์ฝ๋
@Module
@InstallIn(ActivityComponent::class)
object GoogleAuthModule {
@Provides
@ActivityScoped
fun provideGoogleIdOption(): GetGoogleIdOption {
return GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(BuildConfig.GOOGLE_API_KEY)
.build()
}
@Provides
@ActivityScoped
fun provideCredentialRequest(): GetCredentialRequest {
return GetCredentialRequest.Builder()
.addCredentialOption(provideGoogleIdOption())
.build()
}
@Provides
@ActivityScoped
fun provideCredentialManager(
@ActivityContext context: Context,
): CredentialManager {
return CredentialManager.create(context)
}
}