Android의 SharedPreferences
는 키-값 쌍을 사용하여 애플리케이션의 간단한 데이터를 저장하고 검색하기 위한 경량 데이터 저장소입니다. 주로 사용자 설정, 애플리케이션의 상태, 자주 사용되는 간단한 데이터를 저장하는 데 사용됩니다. SharedPreferences
는 XML 파일로 데이터를 저장하며, 이는 앱이 제거될 때까지 지속됩니다.
주요 특징
- 경량 데이터 저장: 문자열, 정수, 부울, 부동 소수점 및 문자열 집합과 같은 원시 데이터를 저장할 수 있습니다.
- 키-값 저장소: 데이터를 키-값 쌍으로 저장하여 특정 키를 사용하여 데이터에 빠르게 접근할 수 있습니다.
- 간단한 API: 데이터 저장 및 검색을 위한 간단한 인터페이스를 제공하여 사용하기 쉽습니다.
- 비동기 처리: 비동기식으로 데이터를 읽고 쓸 수 있습니다.
SharedPreferences
사용법
1. SharedPreferences
객체 가져오기
SharedPreferences
객체를 가져오는 두 가지 방법이 있습니다:
- 앱 전체에서 공유되는 기본 설정 파일:
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
- 사용자 정의 파일 이름을 사용하는 설정 파일:
SharedPreferences sharedPreferences = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
2. 데이터 저장
SharedPreferences.Editor
를 사용하여 데이터를 저장합니다.
SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("key_string", "value"); editor.putInt("key_int", 10); editor.putBoolean("key_boolean", true); editor.putFloat("key_float", 1.5f); editor.putLong("key_long", 100L); editor.putStringSet("key_set", new HashSet<>(Arrays.asList("value1", "value2"))); editor.apply(); // 또는 editor.commit();
apply()
: 비동기식으로 데이터를 저장합니다.commit()
: 동기식으로 데이터를 저장하며, 저장 성공 여부를 반환합니다.
3. 데이터 읽기
저장된 데이터를 가져옵니다. 데이터가 없을 경우 기본값을 반환합니다.
String myString = sharedPreferences.getString("key_string", "default_value"); int myInt = sharedPreferences.getInt("key_int", 0); boolean myBoolean = sharedPreferences.getBoolean("key_boolean", false); float myFloat = sharedPreferences.getFloat("key_float", 0.0f); long myLong = sharedPreferences.getLong("key_long", 0L); Set<String> mySet = sharedPreferences.getStringSet("key_set", new HashSet<>());
4. 데이터 삭제
특정 키를 사용하여 데이터를 삭제하거나, 전체 데이터를 삭제할 수 있습니다.
// 특정 키를 사용하여 데이터 삭제 SharedPreferences.Editor editor = sharedPreferences.edit(); editor.remove("key_string"); editor.apply(); // 또는 editor.commit(); // 모든 데이터 삭제 editor.clear(); editor.apply(); // 또는 editor.commit();
5. 데이터 변경 리스너 등록
데이터 변경을 감지하기 위해 리스너를 등록할 수 있습니다.
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // 변경된 데이터를 처리합니다. if (key.equals("key_string")) { String newValue = sharedPreferences.getString(key, "default_value"); // 새로운 값으로 작업 수행 } } }; // 리스너 등록 sharedPreferences.registerOnSharedPreferenceChangeListener(listener); // 리스너 해제 sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);
장점과 단점
장점
- 간단한 데이터 저장: 간단한 설정 및 상태 데이터를 저장하는 데 매우 편리합니다.
- 쉬운 사용법: 직관적인 API로 인해 사용하기 쉽습니다.
- 빠른 접근: 메모리에 로드되어 빠른 데이터 접근이 가능합니다.
단점
- 대용량 데이터 비적합: 대용량 데이터나 복잡한 데이터 구조를 저장하는 데 적합하지 않습니다.
- 비동기식 동작 주의:
apply()
메서드는 비동기적으로 데이터를 저장하므로, 저장 후 즉시 데이터가 디스크에 반영되지 않을 수 있습니다. - 보안: 평문으로 저장되므로 민감한 데이터 저장에는 부적합합니다. 민감한 데이터는 암호화를 통해 보호해야 합니다.
활용 예제
사용자 로그인 상태 저장:
// 로그인 상태 저장 SharedPreferences sharedPreferences = context.getSharedPreferences("user_prefs", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean("is_logged_in", true); editor.apply(); // 로그인 상태 확인 boolean isLoggedIn = sharedPreferences.getBoolean("is_logged_in", false);
SharedPreferences
는 Android 애플리케이션에서 간단한 데이터를 저장하고 관리하는 데 매우 유용한 도구입니다. 올바르게 사용하면 앱의 설정, 상태, 간단한 사용자 데이터를 효과적으로 관리할 수 있습니다.