공식 문서 : https://developer.android.com/training/data-storage/shared-preferences?hl=ko
키-값 데이터 저장 | Android 개발자 | Android Developers
키-값 데이터 저장 저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용해야 합니다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단
developer.android.com
공식 문서 2 : https://developer.android.com/reference/android/content/SharedPreferences?hl=ko
SharedPreferences | Android Developers
developer.android.com
SharedPreferences
Room과 비슷한 안드로이드의 로컬DB이다. 간단한 설정, 문자열 같은 데이터를 저장하기 위해 사용한다. 즉, 저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용한다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공한다.
어플리케이션에 xml 파일 형태로 데이터를 저장하며, 삭제되기 전까지 저장한 데이터가 보존된다. 객체를 생성할 때 전달한 이름을 파일명으로 사용한다.
키-값 쌍 방식으로 저장되며, put/get 메소드를 사용해 데이터를 저장하고 읽을 수 있다.
■ getSahredPreferences
getSahredPreferences로 SharedPreferences를 생성할 수 있다.
getPreferences(int mode)
한 개의 액티비티에서만 사용할 수 있는 Preferences를 생성한다. Preferences가 사용된 액티비티 이름으로 파일이 생성된다. 기본적으로 하나의 액티비티에서만 사용할 수 있으나, getSharedPreferences()로 다른 액티비티에서도 사용할 수 있게 할 수 있다.
getSharedPreferences(String name, int mode)
String name으로 전달된 값을 가진 SharedPreferences를 생성한다.
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
gstSharedPreferences의 인자는 파일 이름, MODE 값이다.
■ Editor
SharedPreferences를 편집하려면 SharedPreferences에서 edit()을 호출하여 SharedPreferences.Editor를 만든다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putInt(getString(R.string.saved_high_score_key), newHighScore)
commit()
}
edit()를 이용해 editor객체를 가져온 뒤, put api들을 이용하여 값을 저장할 수 있다. 이 때 인자는 ( key : value ) 쌍으로 전달해야 한다.
putString()
putInt()
putLong()
putBoolean()
putStringSet()
putFloat()
또한 반드시 apply() 또는 commit()을 해야 변경된 사항이 SharedPreferences에 저장된다. apply()는 메모리 내 SharedPreferences 객체를 즉시 변경하지만 업데이트를 디스크에 비동기적으로 적용한다. commit()을 사용하여 데이터를 디스크에 동기적으로 쓸 수도 있다. 그러나 commit()은 동기적이므로 기본 스레드에서 호출하는 것을 피해야 한다. (apply()는 비동기적인 호출이므로, 처리중인 스레드가 Blocking되지 않는다. 저장될 때 까지 기다릴 필요가 없다면 apply()를 사용하는 것이 좋다.)
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)
val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
SharedPreferences에서 제공하는 get() api를 사용하여 저장된 값을 읽어와 저장할 수 있다. 첫 번째 인자는 SharedPreferences의 이름이고, 두번째 인자는 기본 값으로 key에 대한 데이터가 없을 때 리턴되도록 설정하는 값이다.
String getString(String key, String defValue)
int getInt(String key, int defValue)
long getLong(String key, long defValue)
float getFloat(String key, float defValue)
boolean getBoolean(String key, boolean defValue)
Set getStringSet(String key, Set defValues)
보통 onPause()가 호출될 때 데이터를 저장하는 것이 가장 좋고, 데이터를 읽을 때는 onCreate()처럼 초기화를 하는 시점에 읽거나, 또는 저장된 데이터가 필요할 때 읽어서 사용하면 된다.
저장된 모든 Shared데이터를 삭제할 때는 Editor.clear()를 호출한 뒤 apply()를 호출하여 삭제된 빈 내용이 저장되도록 한다.
'ANDROID' 카테고리의 다른 글
| Android - 로컬DB편 : Room (0) | 2022.01.13 |
|---|---|
| 00 - kotlin 문법 (0) | 2022.01.05 |