
Android SharedPreferences 개요 및 사용 방법
1. SharedPreferences란?
SharedPreferences는 Android에서 간단한 데이터(예: 설정 값, 사용자 정보)를 영구적으로 저장하느 방법 중 하나입니다. 내부적으로 Key-Value 형태의 XML 파일에 데이터를 저장하며, 앱을 종류해도 유지됩니다.
주요 특징
- 경량 저장소: 작은 크기의 데이터 저장에 적합 (예: 설정 값, 토글 상태 등)
- 비동기 처리 지원: apply() 메서드를 사용하면 비동기 저장 가능
- 앱 내에서만 사용 가능: 앱을 삭제하면 저장된 데이터도 삭제됨
- 보안에 취약: 파일 기반 저장 방식이므로 민간한 데이터는 저장하면 안됨(→ EncryptedSharedPreferences 사용 추천)
2. SharedPreferences 사용 방법
1) 데이터 저장(쓰기)
val sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
val editor = sharedPref.edit()
editor.putString("username", "한가닥")
editor.putInt("userAge", 20)
editor.putBoolean("isPremiumUser", true)
editor.apply() // 비동기 저장 (commit() 사용 시 동기 저장)
2) 데이터 불러오기
val sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
val username = sharedPref.getString("username", "기본값")
val userAge = sharedPref.getInt("userAge", 0)
val isPremiumUser = sharedPref.getBoolean("isPremiumUser", false)
3) 특정 데이터 삭제
val editor = sharedPref.edit()
editor.remove("username")
editor.apply()
4) 모든 데이터 삭제
val editor = sharedPref.edit()
editor.clear()
editor.apply()
3. 활용 방법
1) 로그인 유지 기능
사용자가 로그인 상태를 유지하도록 SharedPreferences를 활용할 수 있습니다.
fun saveLoginState(isLoggedIn: Boolean) {
val sharedPref = getSharedPreferences("UserSession", Context.MODE_PRIVATE)
sharedPref.edit().putBoolean("isLoggedIn", isLoggedIn).apply()
}
fun isUserLoggedIn(): Boolean {
val sharedPref = getSharedPreferences("UserSession", Context.MODE_PRIVATE)
return sharedPref.getBoolean("isLoggedIn", false)
}
2) 앱 설정 값 저장
예를 들어, 다크 모드 설정을 유지하는 코드입니다.
fun setDarkMode(enabled: Boolean) {
val sharedPref = getSharedPreferences("AppSettings", Context.MODE_PRIVATE)
sharedPref.edit().putBoolean("darkMode", enabled).apply()
}
fun isDarkModeEnabled(): Boolean {
val sharedPref = getSharedPreferences("AppSettings", Context.MODE_PRIVATE)
return sharedPref.getBoolean("darkMode", false)
}
3) 사용 횟수 기록
fun incrementAppOpenCount() {
val sharedPref = getSharedPreferences("AppStats", Context.MODE_PRIVATE)
val count = sharedPref.getInt("openCount", 0) + 1
sharedPref.edit().putInt("openCount", count).apply()
}
4. SharedPreferences 한계 및 대안
❌ 한계
- 데이터가 암호화되지 않음 (보안에 취약)
- 대량의 데이터를 저장하기엔 부적합
- 다중 프로세스 동기화 문제 발생 가능
✔️ 대안
- DataStore (Jetpack) → SharedPreferences 보다 최신 방식
- EncryptedSharedPreferences → 데이터 암호화 가능
- Room (SQLite) → 복잡한 데이터 저장 가능
이렇듯 SharedPreferencse는 간단한 데이터 자징에 유용하지만, 보안과 확장성을 고려해야 합니다. 최신 앱에서는 DataStore를 권장하지만, SharedPreferences도 여전히 많이 사용됩니다. 사용 용도에 맞게 적절한 저정소를 선택하세요!
도움되는 다른 게시물
- Android DataStore: https://koreaworldinfo.co.kr/?p=13