my repository

Android :: SharedPreferences๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋ณธ๋ฌธ

IT/Android (Kotlin)

Android :: SharedPreferences๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

hjin 2020. 6. 10. 17:29

๐Ÿ’ก SharedPreferences

 

SharedPreferences๋Š” (key, value) ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ๊ฐ’ ์ €์žฅ์— ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ๋‹ค๋ฉด ์„œ๋ฒ„๋‚˜ DB์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ, ์ดˆ๊ธฐ ์„ค์ •๊ฐ’์ด๋‚˜ ์ž๋™ ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” SharedPreferences๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1. SharedPreferences ์ƒ์„ฑ

val prefs : SharedPreferences = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE)
val editor : SharedPreferences.Editor = prefs.edit() // ๋ฐ์ดํ„ฐ ๊ธฐ๋ก์„ ์œ„ํ•œ editor

(1) getSharedPreferences(key, mode)

MODE_PRIVATE : ์ž๊ธฐ ์•ฑ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ• ๋•Œ (0์„ ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค)

MODE_WORLD_READABLE : ๋‹ค๋ฅธ ์•ฑ์—์„œ ์ฝ๊ธฐ ๊ฐ€๋Šฅ

MODE_WORLD_WRITEABLE : ๋‹ค๋ฅธ ์•ฑ์—์„œ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ

 

(2) ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SharedPreferences.Editor ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์•ผํ•œ๋‹ค.

    ์ƒ์„ฑํ•œ editor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ๋ฐ์ดํ„ฐ ์ €์žฅ

editor.putString(key, value)
editor.commit() // ํ•„์ˆ˜

Editor ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์„ key, value ํ˜•ํƒœ๋กœ ์ž…๋ ฅํ•˜๊ณ 

commit ํ•ด์ฃผ๋ฉด ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ์™„๋ฃŒ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  ๋‚˜์„œ commit์„ ๊ผญ !! ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜๋Š” boolean, int, float, long, string์ด ์žˆ๋‹ค.

 

3. ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

prefs.getString(key, "")

SharedPreferences ๊ฐ์ฒด prefs๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์˜ key์™€ defaultValue(key ๊ฐ’์ด null์ผ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๊ฐ’)๋ฅผ

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

4. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ

editor.remove(key)
editor.clear()
editor.commit()

remove(key)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด key์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๊ณ ,

clear()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด SharedPreferences์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ€๊ฒฝ ํ›„์—๋Š” commit์„ ํ•ด์ค€๋‹ค.

 

 

๐Ÿ“ ์˜ˆ์ œ

๋กœ๊ทธ์ธ ํ›„ ์•ฑ์„ ์ข…๋ฃŒํ–ˆ๋‹ค๊ฐ€ ์žฌ์‹œ์ž‘ ์‹œ ์ž๋™ ๋กœ๊ทธ์ธ ๋˜๋„๋ก ๊ตฌํ˜„

 

< MySharedPreferences.kt >

object MySharedPreferences {
    private val MY_ACCOUNT : String = "account"

    fun setUserId(context: Context, input: String) {
        val prefs : SharedPreferences = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
        val editor : SharedPreferences.Editor = prefs.edit()
        editor.putString("MY_ID", input)
        editor.commit()
    }

    fun getUserId(context: Context): String {
        val prefs : SharedPreferences = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
        return prefs.getString("MY_ID", "").toString()
    }

    fun setUserPass(context: Context, input: String) {
        val prefs : SharedPreferences = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
        val editor : SharedPreferences.Editor = prefs.edit()
        editor.putString("MY_PASS", input)
        editor.commit()
    }

    fun getUserPass(context: Context): String {
        val prefs : SharedPreferences = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
        return prefs.getString("MY_PASS", "").toString()
    }

    fun clearUser(context: Context) {
        val prefs : SharedPreferences = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
        val editor : SharedPreferences.Editor = prefs.edit()
        editor.clear()
        editor.commit()
    }

}

 

< LoginActivity.kt >

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        // SharedPreferences ์•ˆ์— ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๋•Œ -> Login
        if(MySharedPreferences.getUserId(this).isNullOrBlank()
            || MySharedPreferences.getUserPass(this).isNullOrBlank()) {
            Login()
        }
        else { // SharedPreferences ์•ˆ์— ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์„ ๋•Œ -> MainActivity๋กœ ์ด๋™
            Toast.makeText(this, "${MySharedPreferences.getUserId(this)}๋‹˜ 
            	์ž๋™ ๋กœ๊ทธ์ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
            val intent = Intent(this, MainActivity::class.java)
            startActivity(intent)
            finish()
        }
    }

    fun Login() {

        btn_login.setOnClickListener {

            if(et_id.text.isNullOrBlank() || et_pass.text.isNullOrBlank()) {
                Toast.makeText(this, "์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”", Toast.LENGTH_SHORT).show()
            }
            else {
                MySharedPreferences.setUserId(this, et_id.text.toString())
                MySharedPreferences.setUserPass(this, et_pass.text.toString())
                Toast.makeText(this, "${MySharedPreferences.getUserId(this)}๋‹˜ 
                	๋กœ๊ทธ์ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
                var intent = Intent(this, MainActivity::class.java)
                startActivity(intent)
                finish()
            }
        }
    }

}

 

< MainActivity.kt >

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        tv_info.setText("ID : " + MySharedPreferences.getUserId(this))

        btn_logout.setOnClickListener {
            MySharedPreferences.clearUser(this)
            val intent = Intent(this, LoginActivity::class.java)
            startActivity(intent)
            finish()
        }
    }
}

 

๐Ÿ’ป ๊ฒฐ๊ณผ

1. ์•„์ด๋”” ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ → ๋กœ๊ทธ์ธ

2. ๋กœ๊ทธ์ธ ๋œ ํ™”๋ฉด

3. ์•ฑ ์ข…๋ฃŒ ํ›„ ์žฌ์‹œ์ž‘ ์ž๋™ ๋กœ๊ทธ์ธ

 

 

 

Android ๊ณต์‹๋ฌธ์„œ : https://developer.android.com/training/data-storage/shared-preferences?hl=ko