본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
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);
'Android' 카테고리의 다른 글
[깡샘의 안드로이드 프로그래밍] 정리 13 - WebView (0) | 2018.01.05 |
---|---|
[깡샘의 안드로이드 프로그래밍] 정리 12 - Custom Adapter (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 10 - SQLiteDatabase (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 9 - DisplayMetrics (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 8 - 이벤트 처리 (0) | 2018.01.05 |