๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๊ธฐ๋ก/Filmo ์˜ํ™” ํ”„๋กœ์ ํŠธ

๐Ÿ’‰Android ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์— di ์ ์šฉํ•ด๋ณด๋Š” ๊ธฐ๋ก

by hyeonha 2024. 3. 15.

๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

ํ˜„์žฌ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์— 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)
    }
}
728x90