Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

키-값 데이터 저장

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

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

참고: SharedPreferences API는 키-값 쌍을 읽고 쓰는데 사용되며 앱 설정을 위한 사용자 인터페이스 빌드를 지원하는 Preference API와 혼동해서는 안 됩니다(Preference API도 사용자의 설정을 저장하는 데 SharedPreferences를 사용하긴 함). Preference API에 관한 자세한 내용은 설정 개발자 가이드를 참조하세요.

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

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

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

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

Kotlin

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

자바

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)
    

자바

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

주의: MODE_WORLD_READABLEMODE_WORLD_WRITEABLE 모드는 API 수준 17부터 지원 중단되었습니다. Android 7.0(API 수준 24)부터 Android에서 이러한 모드를 사용하면 SecurityException이 발생합니다. 앱에서 비공개 파일을 다른 앱과 공유해야 하면 FLAG_GRANT_READ_URI_PERMISSION과 함께 FileProvider를 사용하면 됩니다. 자세한 내용은 파일 공유를 참조하세요.

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

공유 환경설정에 쓰기

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

참고: SharedPreferences 객체가 아닌 EncryptedSharedPreferences 객체에서 edit() 메서드를 호출하여 공유 환경설정을 더 안전하게 수정할 수 있습니다. 자세한 내용은 더 안전하게 데이터를 사용하는 방법에 관한 가이드를 참조하세요.

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)
        commit()
    }
    

자바

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

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)
    

자바

    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);