๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
์ด๋ฒ์ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ฌ ๊ฐ ๋ก๊ทธ์ธ ๋ณ๋ก ์ด๊ธฐํ ์ฝ๋๋ฅผ ์์ฑํด์ค์ผํ๋ค.
์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด์ ๋ด ๊ณ ๋ฏผ์
- onCreate์ init ์ค ์ด๋ ๋ฉ์๋์ ํฌํจํด์ผํ ์ง
- ํ์ฌ์ ์กํฐ๋นํฐ ํด๋์ค์ Application ํด๋์ค ์ค ์ด๋์ ์์ฑํด์ฃผ์ด์ผํ๋์ง๊ธฐ์ค์ ๋ํ ๊ฒ์ด์๋ค.
๋๋ค ์๋๋ฅผ ํด๋ณด์์ง๋ง ๋ช ํํ ์ฐจ์ด๋ฅผ ์๊ธฐ ์ด๋ ค์ ๋ฉํ ๊ฐ๋ฐ์๋ถ๊ป ์ง๋ฌธ์ ๋๋ ธ๋ค!
๊ฐ๋ฐ์๋ถ๊ป์๋ ๋ณ๋์ ์ด๊ธฐํ ๋ชจ๋์ ๋ง๋ค์ด์ ์งํํ ์ ์๋ค๊ณ ๋ง์ ์ฃผ์ จ๊ณ ๊ทธ ๋ฐฉ์์ด ๋ฐ๋ก App StartUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์ด๊ธฐํํ๋ ๊ฒ์ด์๋ค!!
๊ทธ๋์ ๋ก๊ทธ์ธ ์ฝ๋์ ๊ด๋ จํ์ฌ ๋ด ์ฝ๋๋ฅผ App StartUp ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ํ ์ฝ๋๋ฅผ ๋น๊ตํ๊ณ ๋ด์ฉ์ ์ดํดํด๋ณด๋ คํ๋ค!
์ด์ ๊น์ง๋...
์ด์ ์๋ ์ด๊ธฐํํด์ผํ๋ ๊ตฌ์ฑ ์์์ ๊ดํด ๋ณ๋์ content provider๋ฅผ ์ ์ํด์ฃผ์ด์ผํ๋ค. ๊ทธ๋ฌ๋ content provider๋ ์ด๊ธฐํ ์์๋ฅผ ๋ณด์ฅํด์ฃผ์ง ์๊ณ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค๋ ๋จ์ ์ด ์์๋ค. ํ์ง๋ง ์ด์ App startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋จ์ ์ ๊ทน๋ณต ํ ์ ์๋ค.
App startUp
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฑ ์์ ์ ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ธฐํํ๊ณ ์ข ์ํญ๋ชฉ์ ๋ช ์์ ์ผ๋ก ์ ์ํ๋๋ฐ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค! ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด์ ์์ ์ํ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ด๊ธฐํ ์์ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์ ์๋ค. ๋ํ ์ฑ ์์ ์๊ฐ๋ ๊ฐ์ ๋๋ค๊ณ ํ๋ค!!
๊ตฌ์ฑ ์์ ์ด๋์ ๋ผ์ด์ ๊ตฌํ
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ๊ตฌ์ฑ์์๋ฅผ ์๋์ผ๋ก ์ด๊ธฐํํ๋ ค๋ฉด ์ฑ์์ ์ด๊ธฐํํด์ผํ๋ ๊ฐ ๊ตฌ์ฑ์์์ ๊ตฌ์ฑ ์์ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ ์ํด์ผํ๋ค.
Initializer<T> ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ๊ฐ ๊ตฌ์ฑ์์ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ ์ํด์ค๋ค.
์ด ์ธํฐํ์ด์ค๋ 2๊ฐ์ง ๋ฉ์๋๋ฅผ ์ ์ํ๋ค.
1๏ธโฃ create ๋ฉ์๋ : ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ธฐํํ๋๋ฐ ํ์ํ ๋ชจ๋ ์์ ์ ํฌํจํ๊ณ T ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
2๏ธโฃ dependencies ๋ฉ์๋ : ์ด๋์ ๋ผ์ด์ ์ ์ข ์๋ ๋ค๋ฅธ Initializer<T> ๊ฐ์ฒด ๋ชฉ๋ก์ ๋ฐํํ๋ค. ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฑ์ด ์์๋ ๋ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์คํํ๋ ์์๋ฅผ ์ ์ดํ ์ ์๋ค.
์ฐ์ startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋ ์ด๊ธฐํํด์ฃผ๋ ํํ๋ ์๋์ ๊ฐ์๋ค.
์นด์นด์ค ์ด๊ธฐํ
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ์ : Application ํ์ผ์์ ์ด๊ธฐํ ๋ก์ง์ ๋ด๊ณ ์๋ค.
@HiltAndroidApp
class FilmoApp : Application() {
override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, getString(R.string.kakao_app_key))
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ํ
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ตฌํํด์ฃผ์ด์ผํ๋ create ์ธํฐํ์ด์ค์ dependencies ์ธํฐํ์ด์ค๋ฅผ ํตํด Initializer<T>๋ฅผ ์ ์ํ๊ณ ์๋ค.
class KakaoInitializer : Initializer<Unit> {
override fun create(context: Context) {
KakaoSdk.init(
context = context,
appKey = context.getString(R.string.kakao_app_key),
)
}
override fun dependencies(): List<Class<out Initializer<*>>> {
return listOf()
}
}
๋ค์ด๋ฒ ์ด๊ธฐํ์ ๊ฒฝ์ฐ
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ์
class NaverInitializer : Initializer<Unit> {
override fun create(context: Context) {
NaverIdLoginSDK.initialize(
context = context,
clientId = context.getString(R.string.naver_client_id),
clientSecret = context.getString(R.string.naver_client_secret),
clientName = context.getString(R.string.naver_client_name),
)
}
override fun dependencies(): List<Class<out Initializer<*>>> {
return listOf()
}
}
startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ํ
class NaverInitializer : Initializer<Unit> {
override fun create(context: Context) {
NaverIdLoginSDK.initialize(
context = context,
clientId = context.getString(R.string.naver_client_id),
clientSecret = context.getString(R.string.naver_client_secret),
clientName = context.getString(R.string.naver_client_name),
)
}
override fun dependencies(): List<Class<out Initializer<*>>> {
return listOf()
}
}
๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ด๊ธฐํ๋?
๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ด๊ธฐํ๋ ์ initilizer๋ฅผ ์ฌ์ฉํ์ง ์์๊น?
๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ๋ณ๋์ ์ด๊ธฐํ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ GetGoogleIdOption ๊ฐ์ฒด ๊ตฌํ ํ GetCredentialRequest ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๊ณ ์ด๋ฅผ ํตํด credentialManager์ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ ์ฝ๋๊ฐ ํ์ํ์ง ์๋ค
initializer ์ด๊ธฐํ ์์ ์ ํ๋ ๋ฐฉ๋ฒ
dependencies ์ธํฐํ์ด์ค๋ฅผ ํตํด ์คํ ์์๋ฅผ ์ ์ดํ ์ ์๋ค.
์๋์ค ใ ๊ฐ์ด dependencies๋ฅผ ์ ์ํด์ค ๊ฒฝ์ฐ WorkMangerInitializer๋ฅผ ์ดํจํ๋ฏ๋ก startUp์ ExampleLogger ์ ์ WorkManager๋ฅผ ์ด๊ธฐํํ๋ค!
class ExampleLoggerInitializer : Initializer<ExampleLogger> {
override fun create(context: Context): ExampleLogger {
// WorkManager.getInstance() is non-null only after
// WorkManager is initialized.
return ExampleLogger(WorkManager.getInstance(context))
}
override fun dependencies(): List<Class<out Initializer<*>>> {
// Defines a dependency on WorkManagerInitializer so it can be
// initialized after WorkManager is initialized.
return listOf(WorkManagerInitializer::class.java)
}
}
๋ด๋ถ ๋์ ๋ฏ์ด๋ณด๊ธฐ
๋ฐฐ์ด ์
์ด์ ์ด๊ธฐํ ๋ก์ง์ ์ด๋ป๊ฒ ๊ตฌํํด์ผํ ์ง ๊ณ ๋ฏผ์ ํ์ง ์์๋ ๋์ด์ ์ข๋ค. ๋ํ ๋ณ๋์ ๋ชจ๋๋ก ์ถ์ถํ๋ ์ ์ด ์ฝ๋๊ตฌ์กฐ์๋ ํจ์จ์ ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
์์ง ๋ ์๊ณ ์ถ์ ์ ์ ์ด๋ ๊ฒ startUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์์๋์์ ๋์ ์ฌ์ฉํ์ง ์์์ ๋ ์์ ์๊ฐ ๊ฐ์ ์ ์ผ๋ง๋ ๋ง์ ์ํฅ์ด ์๋์ง ์ง์ ์ธก์ ํด์ ์ฐจ์ด๋ฅผ ๋น๊ตํด๋ณด์์ผ๊ฒ ๋ค
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์ ๋ฆฌ (0) | 2024.03.27 |
---|---|
Android ๋ ์ด์์ ๊ณต์๋ฌธ์ ์ ๋ฆฌ (2) | 2024.03.27 |
Android Context ์ฌ์ฉ ์ Memory leak ๋ฐฉ์ง๋ฅผ ์ํ ๋ฌธ์ ํด๊ฒฐ (0) | 2024.03.20 |
๐๏ธ[Android ์ฑ ์ํคํ ์ณ] : UI layer , Domain layer, Data layer (0) | 2024.03.15 |
๐Android ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ di ์ ์ฉํด๋ณด๋ ๊ธฐ๋ก (0) | 2024.03.15 |