SharedPreferences
SharedPreferences를 사용해 앱 세션이 바뀌어도 간단한 키-값 데이터를 유지합니다. 환경 설정을 저장하고 읽고 삭제하는 방법을 배웁니다.
SharedPreferences은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 6개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 6개의 강의가 포함되어 있습니다.
영구 저장소 옵션
Android는 데이터를 로컬에 저장하는 여러 방법을 제공합니다.
- SharedPreferences — 간단한 키-값 쌍(설정, 토큰)
- Room — 구조화된 SQLite 데이터베이스(복잡한 데이터)
- DataStore — SharedPreferences를 대체하는 최신 비동기 방식
- 파일 — 원시 파일 입출력
SharedPreferences는 간단한 설정과 사용자 환경설정을 저장하는 데 적합합니다.
SharedPreferences란?
SharedPreferences는 기기의 XML 파일에 키-값 쌍으로 데이터를 저장합니다. 다음 유형을 지원합니다.
- String
- Int / Long / Float
- Boolean
- Set<String>
데이터는 앱을 다시 시작해도 유지되며 구성 변경(화면 회전) 후에도 보존됩니다.
SharedPreferences 인스턴스 가져오기
SharedPreferences 객체를 가져오는 두 가지 방법입니다.
// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
"MyAppPrefs", // file name
Context.MODE_PRIVATE // only your app can read it
)
// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)데이터 쓰기
Editor를 사용하여 값을 쓴 다음 apply()를 호출합니다.
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
prefs.edit()
.putString("username", "alice")
.putInt("login_count", 5)
.putBoolean("dark_mode", true)
.apply() // async, non-blocking — preferred over commit()
// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
putString("username", "alice")
apply()
}데이터 읽기
키로 값을 읽고, 키가 없을 때 사용할 기본값을 제공합니다.
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
val username = prefs.getString("username", "Guest") // default: "Guest"
val count = prefs.getInt("login_count", 0) // default: 0
val darkMode = prefs.getBoolean("dark_mode", false) // default: false
println("Hello, $username! Logins: $count. Dark: $darkMode")실용적인 예: 테마 전환
다크 모드 설정을 저장하고 복원합니다.
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
prefs = getSharedPreferences("settings", MODE_PRIVATE)
// Restore saved state
binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)
binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
prefs.edit().putBoolean("dark_mode", isChecked).apply()
}
}
}로그인 토큰 저장하기
앱을 다시 시작해도 인증 토큰을 유지하고 확인합니다.
// Save token after login
fun saveToken(token: String) {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.putString("token", token)
.apply()
}
// Check if user is logged in
fun isLoggedIn(): Boolean {
val token = getSharedPreferences("auth", MODE_PRIVATE)
.getString("token", null)
return token != null
}
// Clear on logout
fun logout() {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.remove("token")
.apply()
}데이터 삭제 및 초기화
특정 키를 삭제하거나 모든 데이터를 지울 수 있습니다.
.remove("key")— 항목 하나를 삭제합니다..clear()— 파일의 모든 내용을 삭제합니다.
항상 .apply()를 호출합니다(동기식 확인이 필요하면 .commit()을 사용합니다).
SharedPreferences와 DataStore 비교
SharedPreferences는 잘 작동하지만 다음과 같은 제한이 있습니다.
- 동기식 읽기는 메인 스레드를 차단할 수 있습니다.
- 유형 안전성이 없습니다.
Jetpack DataStore는 최신 대체 방식으로, Kotlin Flow와 유형 안전성을 갖춘 완전한 비동기 방식입니다. 새 프로젝트에서는 DataStore를 우선적으로 사용하세요. SharedPreferences는 여전히 널리 사용되며 적은 양의 데이터에는 충분히 적합합니다.
빠른 확인
UI 스레드를 차단하지 않고 비동기적으로 SharedPreferences에 데이터를 저장하는 메서드는 무엇인가요?
복습: SharedPreferences
이제 앱을 실행할 때마다 간단한 데이터를 유지할 수 있습니다.
- 가져오기:
getSharedPreferences(name, MODE_PRIVATE) - 쓰기:
.edit().putString(key, value).apply() - 읽기:
.getString(key, defaultValue) - 삭제:
.edit().remove(key).apply() commit()(동기식)보다apply()(비동기식)를 사용합니다.
다음 과정: 앱 아키텍처 — ViewModel, Room, Coroutines
자주 묻는 질문
“SharedPreferences” 강의는 무료인가요?
네 — “SharedPreferences” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 6개의 강의가 포함되어 있습니다.
“SharedPreferences”에서 뭘 배우나요?
SharedPreferences를 사용해 앱 세션이 바뀌어도 간단한 키-값 데이터를 유지합니다. 환경 설정을 저장하고 읽고 삭제하는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Android Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 6개 중 4번째 강의입니다.
“SharedPreferences” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.