개발 끄적끄적/Android

[Android Studio] 간단한 정보 저장 - SharedPreferences 를 파헤쳐보자

공간을담다 2020. 7. 1. 14:18
반응형

앱을 개발하면서 데이터를 저장해야 할 일은 무궁무진하게 많습니다. 데이터를 저장하는 방법에는 여러 가지가 있는데, 그 중 하나인 SharedPreferences에 대해 알아보겠습니다.


 

 

SharedPreferences란?

 

SharedPreferences는 간단한 값을 저장할 때 사용합니다. 어플리케이션의 설정 값, 로그인 여부 등 간단한 값을 위해 DB를 사용하기엔 번거로운데, 이때 사용하기 좋습니다.

 

SharedPreferences는 파일 형태로 저장됩니다. Key, Value 형태로 저장하며 data/data/{패키지명}/shared_prefs 위치에 저장됩니다.

SharedPreferences는 해당 어플리케이션이 삭제되기 전까지 보존됩니다.

 

 

 

 

사용 방법을 알아보겠습니다.

 

val pref = this.getPreferences("prefs", 0)
val editor = pref.edit()

//값을 저장하기 위해선 apply()를 해주어야 함
editor.putString("my_key", "my_value").apply()

//"my_key"를 찾지 못할 경우엔 default 값으로 "" 지정
val mString = pref.getString("my_key", "")

 

키(Key), 값(Value)의 순으로 적용한 예시입니다. mString에는 "my_value"라는 값이 저장됩니다.

value로 넣는 값의 타입에 따라 사용되는 메소드가 달라집니다. 위 예제에서는 String 값이기 때문에 putString(), getString() 메소드가 사용되었습니다.

 

 

 

ex) "key_a" 에 1이란 값을, "key_b"에 true을 저장, 호출한다면 다음과 같이 나타낼 수 있습니다.

val pref = this.getPreferences("prefs", 0)
val editor = pref.edit()

//값을 저장하기 위해선 apply()를 해주어야 함
editor.putInt("key_a", 1).apply()
editor.putBoolean("key_b", true).apply()

//"key_a", "key_b"를 찾지 못할 경우엔 default 값으로 0, false 지정
val mInt = pref.getInt("key_a", 0)
val mBoolean = pref.getBoolean("key_b", false)

 

 

 

 

사실 SharedPreferences는 앱 전역에서 사용되는 경우가 많기 때문에 싱글톤 패턴으로 만들어 앱 어디서든 접근할 수 있도록 해주는 것이 좋습니다.

클래스화 해줄 때는 다른 액티비티보다 먼저 생성되어야 정보를 넘겨줄 수 있습니다. 따라서 SharedPreferences 클래스를 생성해준 뒤 onCreate보다 먼저 선언해주어야 합니다.

 

 

MySharedPreferences.kt

class MySharedPreferences : Application() {
    companion object {
        lateinit var pref: PreferenceUtil
    }

    override fun onCreate() {
        pref = PreferenceUtil(applicationContext)
        super.onCreate()
    }

}

 

PreferencesUtil.kt

class PreferencesUtil(context:Context) {
    private val pref = context.getSharedPreferences("prefs", 0)

	//value는 default 값
    fun getString(key:String, value:String) : String{
        return pref.getString(key,value).toString()
    }

    fun setString(key:String, value:String){
        pref.edit().putString(key,value).apply()
    }

	//default value
    fun getBoolean(key:String, value:Boolean):Boolean{
        return pref.getBoolean(key, value)
    }

    fun setBoolean(key:String, value:Boolean){
        pref.edit().putBoolean(key,value).apply()
    }
}

 

 

위 코드를 작성했다면 Manifest에 등록해주어야 합니다.

 

AndroidManifest.kt

<application 
	android:name=".MySharedPreferences" 
	...
</application>

 

 

 

 

이제 어플리케이션 전역에서 아래 코드를 사용해 데이터를 저장, 접근할 수 있습니다.

MySharedPreferences.pref.getString("key_a", "nothing")

MySharedPreferences.pref.setString("key_a", "value_a")

MySharedPreferences.pref.setBoolean("flag_a", true)

MySharedPreferences.pref.getBoolean("flag_a", false)
반응형