0Pricing
Android Academy · 강의

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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Kotlin 컬렉션
  2. RecyclerView 기초
  3. RecyclerView 클릭 이벤트
  4. SharedPreferences
  5. DataStore 환경 설정
  6. 어댑터와 DiffUtil
← Android Academy(으)로 돌아가기