저장하려는 키-값 컬렉션이 비교적 작은 경우 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);