Android SharedPreferences


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 애플리케이션에서 간단한 데이터를 저장하고 관리하는 데 매우 유용한 도구입니다. 올바르게 사용하면 앱의 설정, 상태, 간단한 사용자 데이터를 효과적으로 관리할 수 있습니다.


Leave a Reply

Your email address will not be published. Required fields are marked *