목차
- Shared Preferences
- Shared Preferences 객체에 접근
- Shared Preferences에 쓰기
- Shared Preferences에서 값을 삭제하기
- Shared Preferences에서 읽기
- 결론
Shared Preferences
크기가 크지 않은 비교적 간단한 데이터를 key-value 형태로 저장할 수 있게 도와주는 라이브러리입니다.
(Shared Preferences API와 Preference API는 다릅니다.)
Shared Preferences는 애플리케이션 내부에 저장됩니다. 따라서 앱을 지우거나 데이터를 삭제하면 Shared Preferences에 저장된 값 또한 사라지게 됩니다. Shared Preferences는 해당 경로에 .xml 형태로 저장됩니다.
data/data/{application_package_name}/shared_prefs/
Shared Preferences 객체에 접근
다음 메서드 중 하나를 호출하여 새로운 Shared Preferences 파일을 생성하거나 기존 파일에 액세스 할 수 있습니다.
- getSharedPreferences() : 이름으로 식별되는 Shared Preferences 파일이 여러 개 필요한 경우 이 메서드를 사용합니다. 이름은 첫 번째 매개변수로 지정할 수 있습니다. 애플리케이션의 모든 Context에서 이 메서드를 호출할 수 있습니다.
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key),
Context.MODE_PRIVATE
)
- getPreferences() : Activity에 Shared Preferences 파일을 하나만 사용해야 하는 경우 Activity에서 이 메서드를 사용합니다. 이 메서드는 Activity에 속한 기본 Shared Preferences 파일을 검색하기 때문에 이름을 명시하지 않아도 됩니다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Shared Preferences에 쓰기
Shared Preferences에 파일에 입력하려면 SharedPreferences에서 edit()을 호출하여 SharedPreferences.Editor로 만듭니다. (EncryptedSharedPreferences 객체에서 edit() 메서드를 호출하여 더욱 안전하게 수행할 수도 있습니다.)
putInt(), putString()과 같은 메서드를 사용하여 키와 값을 전달합니다. 그런 다음 apply() 혹은 commit()을 호출하여 변경사항을 저장합니다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putInt(getString(R.string.saved_high_score_key), newHighScore)
apply()
}
- apply()는 메모리 내 SharedPreferences 객체를 즉시 변경하지만 업데이트를 디스크에 비동기적으로 씁니다.
- commit()을 사용하여 데이터를 디스크에 동기적으로 쓸 수도 있습니다. 다만, commit()을 사용할 때는 동기적이므로 기본 스레드에서 호출하는 것은 피해야 합니다. UI 렌더링이 일시중지될 수 있기 때문입니다.
Shared Preferences에서 값을 삭제하기
SharedPreferences.Editor로 만든 객체에 remove() 메서드를 호출하여 특정 Key의 Value를 삭제할 수 있습니다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
remove(getString(R.string.saved_high_score_key))
// 전체 삭제는 clear() 메서드를 호출합니다.
// clear()
apply()
}
Shared Preferences에서 읽기
Shared Preferences 파일에서 값을 검색하려면 getInt(), getString()과 같은 메서드를 호출하여 원하는 값에 키를 제공합니다.
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)
결론
Shared Preferences는 작은 데이터를 저장하는 용도로 사용하라고 공식 문서에서 언급하고 있습니다. "작은 데이터"의 기준이 어느 정도인지 알 수 없습니다만, 사실 코딩에 정답은 없기 때문에 여러분의 기준을 갖고 코드를 작성하시면 될 것으로 보입니다. 제 경험으로 봤을 때, 저는 Shared Preferences를 검색 기록, 유저 토큰 값, 유저 이름, 별명 등 민감하지 않은 정보를 저장하는 데 사용했던 것 같습니다. 여기까지 골드였습니다. 즐거운 하루 보내세요 :)
참고자료 :
SharedPreferences로 단순 데이터 저장하기 | Android 개발자 | Android Developers