Android: SharedPreferences

ericbyeric·2021년 6월 24일
0

Android

목록 보기
1/6
post-thumbnail

What is SharedPreferences in Android?

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

일반적으로 DBMS방식은 Table구조로 저장하지만, SharedPreferences는 데이터를 Key-Value방식으로 저장해.

getSharedPreferences()함수는 파일명에 대한 정보를 parameter로 지정하므로 해당 이름으로 Xml 파일을 만든다. 하지만 개발자가 직접 파일을 읽고 쓰는 코드는 필요없고 SharedPreference 객체를 이용해서 데이터 접근이 가능해.

SharedPreferences객체를 획득하는 방식은 아래의 3방식으로 구분되.

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

getPreferences(int mode)

해당 함수는 별도의 파일명을 지정하지 않았으므로 자동으로 엑티비티 이름의 파일 내에 저장해.

ex) MainActivity에서 getPreferences() 함수로 SharedPreferences를 획득하면 MainActivity.xml에 저장되. 이건 MainActivity만을 위한 저장 공간이 됨으로 다른 Activity들에서는 데이터를 사용 불가!

SharedPreferences sharedPreferences = context.getPreferences(Context.MODE_PRIVATE);

getSharedPreferences(String name, int mode)

해당 함수는 파일명의 정보parameter로 지정해서 해당 이름으로 Xml파일을 만들어.
다른 Activity나 Components들이 데이터를 공유해서 이용할 수 있어.
가벼운 데이터들을 각각의 파일로 나눠서 구분하여 저장할 때 사용해.

SharedPreferences sharedPreferences = context.getSharedPreferences(KEY, Context.MODE_PRIVATE);

PreferenceManager.getDefaultSharedPreferences(this);

해당 함수는 별도의 파일명을 명시 안해. 그래서 앱의 패키지명파일명으로 사용해

ex) 패키지명이 com.hyunsoo.test1이였다면 파일명을 "com.hyunsoo.test1_preferences"가 된다.

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

객체생성시 사용하는 parameter의 mode값은 아래와 같다.

  • MODE_PRIVATE
    - (앱 내에서 사용가능, 외부 앱 접근 불가)
  • MODE_WORLD_READABLE
    - 외부 앱 읽기 허용
    • 보안 이슈로 deprecation from API 17
  • MODE_WORLD_WRITEABLE
    - 외부 앱 쓰기 허용
    • 보안 이슈로 deprecation from API 17

SharedPreference.Editor

editor클래스putter함수를 이용해 Key-value 형태로 데이터를 저장

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

위 함수들의 parameter를 보면 "defValue"라는 매개변수가 있어. 이건 key라는 이름의 preference가 존재하지 않을수도 있잖아? 그럴때 우리가 위에 입력한 defValue가 return되는거야 (혹~시 찾는 preference가 없을수도 있자낭~)

SharedPreferences sharedPreferences = context.getSharedPreferences(KEY, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("BoolVal", true);
editor.commit();

참고자료: Android Developer

profile
인생의 해상도를 올려볼까나

0개의 댓글