[ํฐ๋] ํฐ๋ Android Kotlin์ผ๋ก ๊ฐ๋จํ ๋ฐ์ดํฐ ์ ์ฅํ์ฌ ์ ์ฉํ๊ธฐ
์๋
ํ์ธ์ ํฐํ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์ ์ฑํ์
๋๋ค๐
์ ๋ ํฐํ ์๋น์ค์ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ Shared Preference ๊ธฐ์ ์ ๋ํด ๊ฐ๋จํ๊ฒ ์๊ฐํ๊ฒ ์ต๋๋ค.
๐ฉ๐ป Shared Preference ์ด๋?
SharedPreference ์ด๋ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด Key-Value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ Data ๊ตฌ์กฐ์ ๋๋ค.
SharedPreference์ ๋ฒ์ญํ์๋ฉด ๊ณต์ ํ๊ฒฝ์ค์ ์ด๋ผ๋ ๋ป์ ์ป์ ์ ์์ต๋๋ค.
ํ๊ฒฝ ์ค์ ์ ์ธ์ ๋ ์ง ์ ์ฅํ๊ณ ํ์ํ ๋ ๊ฐ์ ธ์ค๋๋ก ์ฌ์ฉํ๋ ๊ณต์ ํ๊ฒฝ ์ค์ ์ ๋๋ค.
Shared Preferences๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ์ฅ ๋ํ์ ์ธ SharedPreference์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- ์ ์ ์ธ์ ์ด ์ง๋๋ ๋ฐ์ดํฐ๊ฐ ์์์ ์ผ๋ก ๋ณด๊ด๋๋ค.
- ์ ์ ์ ์ค์ ๋ฑ ์ธ์ ์ด ์ง๋๋ ๋ณด์กด๋์ด์ผ ํ๋ ๋ฐ์ดํฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
ํน์ง์ ๋ณด๋ ๋ฌด์์ธ์ง ์ด๋ ดํ์ด ์ดํด๊ฐ ๋์๋๊ฑฐ ๊ฐ์ฃ ?
*Geeks for Geeks๋ฅผ ์ฃผ๋ก ์ฐธ๊ณ ํ์์ต๋๋ค.
๐ฉ๐ป ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ด๊ฑฐ๋ฟ์ธ๊ฐ์?
์๋๋๋ค! โ
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ๋ค์ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์ธ Room db์ ๋น๊ตํด์ SharedPreference๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Room db๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด์๋ ๋จผ์ SQLite๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
SQLite๋ ํ์ผ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ ์๊ท๋ชจ, ๋ก์ปฌ, ๋น ๋ฅธ, ๊ฐ๊ฒฐํ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ชฉ์ ์ผ๋ก ํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ๋๋ค.
์๋๋ก์ด๋ ๊ณต์ ๋ฌธ์์๋ SQLite๋ณด๋ค๋ Room db์ ๋ํ ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
์ถ์ํ ๋ ์ด์ด(๋ณต์ก์ฑ์ ์จ๊ธฐ๊ณ ์ ๋ณด ์์ธ์ค๋ฅผ ๋จ์ํํด์ค)๋ฅผ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค๋ฅผ ์ํํ๊ฒ ์ง์ํ๋ฉฐ SQLite๋ฅผ ์๋ฒฝํ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ ์ ํ์ํ ๊น์?
๋ฐ๋ก '์บ์ฑ'์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์บ์ฑ์ผ๋ก ์คํ๋ผ์ธ ์ํ์๋ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ์ฝํ ์ธ ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์์์ ๋งํ๋ Shared Preference๋ Key-Value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ Data ๊ตฌ์กฐ๋ผ๊ณ ๋ง์๋๋ ธ์ต๋๋ค.
๋ฐ๋ผ์ key๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ฉด ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค.
1:1 ๊ด๊ณ๋ง ์ฑ๋ฆฝํ๊ฒ ๋ฉ๋๋ค.
ํ์ง๋ง, SQLite๋ฅผ ํ์ฉํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด 1:n๊ณผ n:m ๊ด๊ณ๋ฅผ ๋ชจ๋ ์ฑ๋ฆฝํ ์ ์์ต๋๋ค.
์ด๋ฐ ์ฅ์ ๋ค๋ง ์๋ค๋ฉด SQLite๋ฅผ ํ์ฉํ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ์์ ์ด์ ๊ฐ ์๊ฒ ์ฃ ?
ํ์ง๋ง SQLite์ ์น๋ช ์ ์ธ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ๋ฐ๋ก ๋ฆฌ์์ค๊ฐ ๋ง์ด ๋ ๋ค๋ ์ ์ ๋๋ค.
ํฐ๋์ด Shared Preference ๊ธฐ์ ์ ์ ํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋์ ๋ฐ์ดํฐ๋ง ์ ์ฅํ ์์ ์ด๋ค.
- 1:1 ๊ด๊ณ๋ง ์ฌ์ฉํ๋ค.
- room db์ ๋นํด ๋๋ ๋ฆฌ์์ค๊ฐ ์ ๋ค.
- ์๋ฒ์ ๊ณ์ํด์ ์ฐ๊ฒฐ์ด ํ์ํ๋ฉฐ ์คํ๋ผ์ธ ์ํ์ ํ์์ด ๋ณ๋ก ์๋ฏธ๊ฐ ์๋ค.
๐ฉ๐ป ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
Android Manifest ํ์ผ์ ์ผ๋ถ์ ๋๋ค.
GlobalApplication.kt ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
class GlobalApplication : Application() {
companion object {
lateinit var prefs: PreferenceUtil
}
override fun onCreate() {
prefs = PreferenceUtil(applicationContext)
super.onCreate()
}
}
companion object๋ Kotlin์์ ์ ์ (static) ๋ฉค๋ฒ๋ฅผ ์ ์ํ๋ ๋ธ๋ก์ ๋๋ค.
ํด๋์ค ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ๊ทผํ ์ ์๋ ๋ฉค๋ฒ๋ก์, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๊ณต์ ๋๋ ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๋ ์ ์ฉํฉ๋๋ค.
PreferenceUtil์ SharedPreferences๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๊ฐ์ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ค๋ ์ ํธ๋ฆฌํฐ ํด๋์ค์ ๋๋ค. ๋ฐ๋ผ์ prefs ๋ณ์๋ฅผ ํตํด ์ด๋์๋ PreferenceUtil์ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.
GlobalApplication ํด๋์ค์ onCreate ๋ฉ์๋์์ prefs ๋ณ์์ PreferenceUtil์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ํ ๋นํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ํ ๋ฒ๋ง ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ ์ญ์ ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ผ๊ด๋ ์ค์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ, GlobalApplication.prefs๋ฅผ ํตํด ์ด๋์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
PreferenceUtil.kt ํ์ผ์ ์์ฑํฉ๋๋ค.
class PreferenceUtil (context: Context){
// SharedPreferences ์ธ์คํด์ค ์์ฑ : ์ฑ๊ธํด ํจํด
private val prefs: SharedPreferences =
context.getSharedPreferences("prefs_name", Context.MODE_PRIVATE)
fun getString(key: String, defValue: String): String {
return prefs.getString(key, defValue).toString()
}
fun setString(key: String, str: String) {
prefs.edit().putString(key, str).apply()
}
}
์ด์ SharedPreference๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น๋ ๋๋ฌ์ต๋๋ค.
GlobalApplication.prefs.setStringd์ ํตํด ์ํ๋ key๊ฐ์ value๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
GlobalApplication.prefs.setString("Key ์ด๋ฆ", "Value ๊ฐ")
GlobalApplication.prefs.getString์ ํตํด ์ํ๋ key๊ฐ์ value๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
GlobalApplication.prefs.getString("Key ์ด๋ฆ", "Value ๊ฐ")
๐ฉ๐ป ๋ง์น๋ฉฐ
์ค๋์ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ SharedPreference์ ๋ํด ์ค๋ช ๋๋ ธ์ต๋๋ค.
์ฒ์ ํฐ๋ ์๋น์ค๋ฅผ ๊ธฐํํ๋ฉฐ Room db๋ ์ ์ฉํด ๋ณด๊ณ SharedPreference๋ ์ ์ฉํด ๋ณด๋ฉฐ ์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํด์ผ ํ ๊น? ํ๋ ๊ถ๊ธ์ฆ์ ๋ง์ ์๋ฃ๋ฅผ ์ฐพ์๋ดค๋ ๊ธฐ์ต์ด ๋ฉ๋๋ค.
์ฌ๋ฌ๋ถ๋ ์์ ์ ์ํฉ์ ๋ง๋ ๊ธฐ์ ์ ์ฌ์ฉํ์
์ ๋์ฑ ์ฆ๊ฑฐ์ด ์๋น์ค๋ฅผ ๊ฐ๋ฐํ์
จ์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
๋ค์์ ์ด๋ค ์ฃผ์ ๋ก ๋์์ฌ์ง ๊ธฐ๋ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค:)๐ค
๊ฐ์ฌํฉ๋๋ค!!
'๐ฉโ๐ป TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TECH] GitHub Actions๋ก CI/CD ๊ตฌ์ถํ๊ธฐ(1) (0) | 2023.08.15 |
---|---|
[TECH] Android Studio๋ก ๋ค์ํ ๊ธฐ๊ธฐ ํ๋ฉด์ ๋์ํ๊ธฐ (0) | 2023.08.07 |
[TECH] RecyclerView ViewModel ์ ์๊ธฐ (0) | 2023.08.02 |
[TECH] Cloudwatch Logs๋ก ๋ก๊ทธ ํ์ผ ์์งํ๊ธฐ (1) | 2023.07.26 |
[TECH] Android ViewBinding์ด๋? (5) | 2023.07.13 |