SharedPreferences로 단순 데이터 저장하기

저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용할 수 있습니다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공합니다. 각 SharedPreferences 파일은 프레임워크에서 관리하며 비공개이거나 공유일 수 있습니다.

이 페이지에서는 SharedPreferences API를 사용하여 간단한 값을 저장하고 검색하는 방법을 보여줍니다.

공유 환경설정의 핸들 가져오기

다음 메서드 중 하나를 호출하여 새로운 공유 환경설정 파일을 생성하거나 기존 파일에 액세스할 수 있습니다.

  • getSharedPreferences(): 이름으로 식별되는 공유 환경설정 파일이 여러 개 필요한 경우 이 메서드를 사용합니다. 이름은 첫 번째 매개변수로 지정할 수 있습니다. 앱의 모든 Context에서 이 메서드를 호출할 수 있습니다.
  • getPreferences(): 활동에 공유 환경설정 파일을 하나만 사용해야 하는 경우 Activity에서 이 메서드를 사용합니다. 이 메서드는 활동에 속한 기본 공유 환경설정 파일을 검색하기 때문에 이름을 제공할 필요가 없습니다.

예를 들어 다음 코드는 리소스 문자열 R.string.preference_file_key로 식별되는 공유 환경설정 파일에 액세스하고 비공개 모드를 사용하여 파일을 열므로 앱에서만 파일에 액세스할 수 있습니다.

Kotlin

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

Java

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

공유 환경설정 파일의 이름을 지정할 때 앱에 고유하게 식별할 수 있는 이름을 사용해야 합니다. 파일 이름 앞에 애플리케이션 ID를 붙이면 좋습니다. 예를 들면 다음과 같습니다. "com.example.myapp.PREFERENCE_FILE_KEY"

또는 활동에 공유 환경설정 파일이 하나만 필요하면 다음과 같이 getPreferences() 메서드를 사용할 수 있습니다.

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

앱 설정을 저장하는 데 SharedPreferences API를 사용하고 있다면 대신 getDefaultSharedPreferences()를 사용하여 전체 앱의 기본 공유 환경설정 파일을 가져와야 합니다. 자세한 내용은 설정 개발자 가이드를 참고하세요.

공유 환경설정에 쓰기

공유 환경설정 파일에 쓰려면 SharedPreferences에서 edit()을 호출하여 SharedPreferences.Editor를 만듭니다.

putInt()putString()과 같은 메서드를 사용하여 쓰려고 하는 키와 값을 전달합니다. 그런 다음 apply() 또는 commit()을 호출하여 변경사항을 저장합니다. 예를 들면 다음과 같습니다.

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score_key), newHighScore);
editor.apply();

apply()는 메모리 내 SharedPreferences 객체를 즉시 변경하지만 업데이트를 디스크에 비동기적으로 씁니다. 또는 commit()을 사용하여 데이터를 디스크에 동기적으로 쓸 수 있습니다. 그러나 commit()은 동기적이므로 기본 스레드에서 호출하는 것을 피해야 합니다. UI 렌더링이 일시중지될 수 있기 때문입니다.

공유 환경설정에서 읽기

공유 환경설정 파일에서 값을 검색하려면 getInt()getString()과 같은 메서드를 호출하여 원하는 값에 키를 제공하고 키가 없으면 선택적으로 반환할 기본값을 제공합니다. 예를 들면 다음과 같습니다.

Kotlin

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)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);