๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘ฉ‍๐Ÿ’ป TECH

[TECH] Android Kotlin์œผ๋กœ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ

by ๋ณด๋ฆฌ ์ฝง๊ตฌ๋ฉ 2023. 7. 20.

[ํ‹ฐ๋Œ] ํ‹ฐ๋Œ Android Kotlin์œผ๋กœ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜์—ฌ ์ ์šฉํ•˜๊ธฐ
 
์•ˆ๋…•ํ•˜์„ธ์š” ํ‹ฐํ”Œ์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž ์ •์ฑ„ํ˜„์ž…๋‹ˆ๋‹ค๐Ÿ˜†
์ €๋Š” ํ‹ฐํ”Œ ์„œ๋น„์Šค์— ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ Shared Preference ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘ฉ‍๐Ÿ’ป Shared Preference ์ด๋ž€?

SharedPreference ์ด๋ž€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” Data ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

SharedPreference
SharedPreference์˜ ํ•ด์„


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 ํŒŒ์ผ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

Kotlin

 

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๋„ ์ ์šฉํ•ด ๋ณด๋ฉฐ ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? ํ•˜๋Š” ๊ถ๊ธˆ์ฆ์— ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ดค๋˜ ๊ธฐ์–ต์ด ๋‚ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„๋„ ์ž์‹ ์˜ ์ƒํ™ฉ์— ๋งž๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์…”์„œ ๋”์šฑ ์ฆ๊ฑฐ์šด ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ์—” ์–ด๋–ค ์ฃผ์ œ๋กœ ๋Œ์•„์˜ฌ์ง€ ๊ธฐ๋Œ€ ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค:)๐Ÿค—

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!