데이터를 간단하게 키-값(key-value) 성격으로 저장합니다.
SharedPreference로 저장하는 데이터는 결국 파일(XML)로 저장되지만, 개발자가 직접 파일을 읽고 쓰는 코드를 작성하지 않고 SharedPreference 객체를 이용해서 데이터를 저장할 수 있습니다.
SharedPreference 객체를 획득하는 방법
SharedPreference 객체를 획득하는 방법은 두 가지가 있습니다.
- getPreferences(int mode)
- getSharedPreferences(String name, int mode)
getPreferences은 별도의 파일명을 지정하지 않아 액티비티 이름의 파일 내에 저장됩니다.
예를 들어 MainActivity에서 getPreferences() 함수로 SharedPreference 객체를 획득하면 MainActivity.xml에 저장됩니다.
다른 액티비티에서는 데이터를 이용할 수 없습니다.
val sharedPref = getPreferences(Context.MODE_PRIVATE)
getSharedPreferences() 함수는 파일명에 대한 정보를 매개변수로 지정하므로 해당 이름으로 XML 파일을 만듭니다.
다른 액티비티나 컴포넌트들이 데이터를 공유할 수 있습니다.
데이터가 많아서 이를 각각의 파일로 구분하여 저장할 때 사용합니다.
val sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
두 가지 이외에도 PreferenceManager.getDefaultSharedPreferences를 통해서 SharedPreference 객체를 가져올 수 있지만
PreferenceManager는 API Level 29에서 deprecated 됐기 때문에 사용을 지양해야 합니다.
PreferenceManager.getDefaultSharedPreferences() 함수는 별도의 파일명을 명시하지 않고, 앱 패키지명을 파일명으로 사용합니다.
만약 패키지 명이 "com.example.test"라면 파일명은 "com.example.test_preferences"가 되며 다른 컴포넌트에서도 사용 가능합니다.
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
mode 값
SharedPreference 객체를 획득할 때 사용하는 모드 값은 다음과 같습니다.
- MODE_PRIVATE: 자기 앱 내에서 사용. 외부 앱에서 접근 불가
- MODE_WORLD_READABLE: 외부 앱에서 읽기 가능
- MODE_WORLD_WRITEABLE: 외부 앱에서 쓰기 가능
MODE_WORLD_READABLE 및 MODE_WORLD_WRITEABLE 모드는 API 수준 17부터 지원 중단되었습니다.
Android 7.0(API 수준 24)부터 Android에서 이러한 모드를 사용하면 SecurityException이 발생합니다.
데이터 저장하기
데이터를 저장하려면 Editor 클래스의 함수를 이용합니다.
- putBoolean(String key, boolean value)
- putFloat(String key, float value)
- putInt(String key, int value)
- putLong(String key, long value)
- putString(String key, String value)
저장한 데이터를 반영하기 위해서는 commit() 또는 apply() 함수를 호출합니다.
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
val editor: SharedPreferences.Editor = sharedPref.edit()
editor.putString("data99", "hi")
editor.putInt("data100", 222)
editor.commit()
데이터 가져오기
데이터를 가져오기 위해서는 SharedPreference 클래스의 getter 함수를 사용합니다.
- getBoolean(String key, boolean defValue)
- getFloat(String key, float defValue)
- getInt(String key, int defValue)
- getLong(String key, long defValue)
- getString(String key, String defValue)
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
val data99: String = sharedPref.getString("data99", "none")
val data100: Int = sharedPref.getInt("data100", 0)
'Android > 개념 및 예제' 카테고리의 다른 글
안드로이드 권한 (런타임 퍼미션) 요청하기 [Kotlin] (0) | 2021.09.29 |
---|---|
Android 소리나는 카운트 다운 타이머 만들기 (CountdownTimer + SoundPool) (0) | 2021.09.26 |
안드로이드 데이터 및 파일 저장소 개요 및 내부 저장소 사용하기 (0) | 2021.05.18 |
안드로이드 퍼미션 개념 정리 (0) | 2021.05.18 |
Realm를 사용해서 안드로이드 앱에 데이터 저장하기 (0) | 2021.05.14 |