본문 바로가기
Android

[깡샘의 안드로이드 프로그래밍] 정리 11 - SharedPreference

by 들풀민들레 2018. 1. 5.

 

 

본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

 

 

 

9장. 파일 및 SharedPreferences을 이용한 데이터 영속화

 

9.3.1. SharedPreferences

 

SharedPreferences는 앱의 데이터를 영속적으로 저장하기 위한 클래스입니다. 

DBMS 방식의 데이터 영속화는 테이블 구조로 저장하지만, SharedPreferences는 데이터를 간단하게 키-값(key-value) 성격으로 저장합니다. SharedPreferences로 저장하는 데이터 역시 결국은 파일(XML)로 저장되지만, 개발자가 직접 파일을 읽고 쓰는 코드를 작성하지 않고  SharedPreferences 객체를 이용해서 간단하게 이용할 수 있습니다. 즉, 개발이 편해진다는 이야기지요.

 

SharedPreferences를 이용하려면 다음과 같은 함수를 이용하여 SharedPreference 객체를 하나 획득합니다.

 

  • getPreferences(int mode)
  • getSharedPreferences(String name, int mode)
  • PreferenceManager.getDefaultSharedPreferences(Context context)

 

getPreferences ( ) 함수는 별도의 파일명을 지정하지 않으므로 자동으로 액티비티 이름의 파일 내에 저장합니다. 

예를 들어, MainActivity에서 getPreferences ( ) 함수로 SharedPreferences를 획득하면 MainActivity.xml에 저장하고 읽게 됩니다. 

결국, 하나의 액티비티만을 위한 저장 공간이 되어 다른 액티비티에서는 데이터를 이용할 수 없습니다.

 

SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);

 

getSharedPreferences ( ) 함수는 파일명에 대한 정보를 매개변수로 지정하므로 해당 이름으로 XML 파일을 만듭니다. 

다른 액티비티나 컴포넌트들이 데이터를 공유해서 이용할 수 있습니다. 데이터가 많은데 이를 각각의 파일로 나누어 구분하여 저장하고자 할 때 주로 이용합니다.

 

SharedPreferences sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);

 

PreferenceManager.getDefaultSharedPreferences ( ) 함수는 별도의 파일명을 명시하지 않으므로 기본으로 앱의 패키지명을 파일명으로 사용합니다. 

만약 앱의 패키지명이 com.example.test였다면 파일명은 "com.example.test_preferences"가 되며 다른 컴포넌트에서도 이용할 수 있습니다.

 

SharedPreferences sharedPref= PreferenceManager.getDefaultSharedPreferences(this);

 

SharedPreferences 객체를 획득할 때 지정하는 mode 값은 다음과 같습니다.

 

  • MODE_PRIVATE: 자기 앱 내에서 사용. 외부 앱에서 접근 불가
  • MODE_WORLD_READABLE: 외부 앱에서 읽기 가능
  • MODE_WORLD_WRITEABLE: 외부 앱에서 쓰기 가능

 

대부분은 MODE_PRIVATE이며 외부 앱을 위해 MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE을 지정할 수 있지만, 보안상의 이유로 MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 API LEVEL 17부터 deprecation 되었습니다.

 

SharedPreferences로 데이터를 저장하려면 Editor 클래스의 함수를 이용합니다. Editor 클래스의 putter 함수를 이용하여 키-값 형태로 데이터를 저장합니다.

 

  • putBoolean(String key, boolean value)
  • putFloat(String key, float value)
  • putInt(String key, int value)
  • putLong(String key, long value)
  • putString(String key, String value)

 

각 데이터 타입을 위한 함수가 제공되며, 이 함수를 이용하여 저장한 데이터를 최종 반영하기 위해 commit( ) 함수를 호출합니다.

 

SharedPreferences.Editor editor=sharedPref.edit();

editor.putString("data1", "hello");

editor.putInt("data2", 100);

editor.commit();

 

저장된 데이터를 획득할 때는 SharedPreference 클래스의 getter 함수를 이용합니다.

 

  • getBoolean(String key, boolean defValue)
  • getFloat(String key, float defValue)
  • getInt(String key, int defValue)
  • getLong(String key, long defValue)
  • getString(String key, String defValue)

 

String data1=sharedPref.getString("data1", "none");

int data2=sharedPref.getInt("data2", 0);