Android/기타 지식

(SharedPreferences) 2. 사용하기

jaesungLeee 2021. 7. 13. 17:28

이미지 출처 : https://www.youtube.com/watch?v=x4-kxoYO5J4

 

이번 포스트에서는 SharedPreferences의 메소드들을 다룬다.

 

1. SharedPreferences 객체 획득

SharedPreferences의 객체를 획득하기 위한 두가지 메소드가 있다.

  1. getPreferences(mode : Int) 
    • Android Developers 공식 가이드에는 다음과 같이 설명되어있다.
      • 활동에 하나의 공유 환경설정 파일만 사용해야 하는 경우 Activity에서 이 메서드를 사용합니다. 이 메서드는 활동에 속한 기본 공유 환경설정 파일을 검색하기 때문에 이름을 제공할 필요가 없습니다.
    • getPreferences()는 별도의 파일명을 지정하지 않는다. 따라서 이 메소드를 사용하는 Activity의 이름을 갖는 파일 내에 데이터가 저장된다. 예를 들어, MainActivity에서 getPreferences()를 사용해 SharedPreferences 객체를 획득하면 MainActivity.xml에 데이터가 저장된다.
    • 따라서, getPreferences()를 사용하면 다른 Activity에서는 데이터를 조회할 수 없다.
    • class PreferencesUtils (context : Context) {
      
      	val preferences : SharedPreferences = context.getPreferences(Context.Mode_Private)
      
      }
  2. getSharedPreferences(fileName : String, mode : Int)
    • Android Developers 공식 가이드에는 다음과 같이 설명되어있다.
      • 첫 번째 매개변수로 지정하는 이름으로 식별되는 여러 공유 환경설정 파일이 필요한 경우 이 메서드를 사용합니다. 앱의 모든 Context에서 이 메서드를 호출할 수 있습니다.
    • 지정한 파일 명의 이름으로 xml 파일을 만든다. 따라서, 다른 Activity나 Component에서 이 파일 명으로 데이터를 조회하여 사용할 수 있다. 여러 데이터를 각각의 파일로 나눠 구분하여 사용할 때 주로 사용된다.
    • class PreferencesUtils(context : Context) {
          
          val preferences : SharedPreferences = context.getSharedPreferences("MyPreferences", Context.Mode_Private)
      
      }

 

  • Mode
    • 각 메소드의 파라미터로 mode가 들어간다. 아래에 mode에 대한 자세한 설명이 있다.
    • API 17 이상 부터는 읽기, 쓰기가 deprecated 되었다.
    • Mode 설명
      MODE_PRIVATE 어플리케이션 내에서 사용 가능, 외부 어플리케이션에서는 접근 불가 (Default)
      MODE_WORLD_READABLE 외부 어플리케이션에서 읽기 가능
      MODE_WORLD_WRITEABLE 외부 어플리케이션에서 쓰기 가능

 

2. SharedPreferences 데이터 저장

데이터를 저장하기 위해서는 ShraedPreferences Class 내부의 Editor Interface를 사용한다.

  1. putString(PREFERENCES_KEY, String)
  2. putBoolean(PREFERENCES_KEY, Boolean)
  3. putInt(PREFERENCES_KEY, Int)
  4. putLong(PREFERENCES_KEY, Long)
  5. putFloat(PREFERENCES_KEY, Float)
  6. putStringSet(PREFERENCES_KEY, Set<String>)

위의 함수들로 Key-Value 쌍을 넣었으면 apply() 혹은 commit()을 해줘야 완전히 저장이 된다.

apply()를 하면 메모리 내 SharedPreferences 객체를 즉시 변경하지만 디스크에 비동기적으로 업데이트 한다.

반면, commit()을 하면 동기적으로 업데이트 하지만  UI 렌더링이 중지되는 것을 막기위해 MainThread에서 호출하는 것을 피해야 한다.

 

private val preferences : SharedPreferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE)

fun setString() {
    val editor = preferences.edit()
    editor.putString(KEY, VALUE).apply()
}

 

3. SharedPreferences 데이터 읽기

get 메소드를 사용하여 SharedPreferences 객체에 저장된 데이터를 가져올 수 있다.

  1. getString(KEY, defValue : String)
  2. getBoolean(KEY, true)
  3. getInt(KEY, defValue : Int)
  4. getLong(KEY, defValue : Long)
  5. getFloat(KEY, defValue : Float)
  6. getStringSet(KEY, defValue : Set<String>)

여기서 defValue는 KEY에 상응하는 VALUE가 없을 시 default로 반환할 VALUE를 의미한다.

 

private val preferences : SharedPreferences = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE)

fun getString() : String {
    return preferences.getString(KEY, "").toString()
}

 

4. SharedPreferences 데이터 영구 저장 방지

이전 포스트에서 설명한 것 처럼 Android 버젼이 올라감에 따라 어플리케이션을 삭제하면 저장된 데이터도 함께 삭제되는 현상이 사라졌다. 따라서, 어플리케이션 삭제시 데이터가 함께 사라지게 하려면 AndroidManifest.xml에 아래의 옵션을 추가해야 한다.

<application
    ...
    
    android:allowBackup = "false"           // default : true

    ...
    
    android:fullBackupContent = "false" >   // add this option

</application>

 

 

References

https://developer.android.com/training/data-storage/shared-preferences?hl=ko 

 

키-값 데이터 저장  |  Android 개발자  |  Android Developers

저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용해야 합니다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공합

developer.android.com

https://ddolcat.tistory.com/26

 

앱을 삭제했을 때 shared preference 데이터 삭제하는 방법

앱을 삭제했을 때 shared preference 데이터 삭제하는 방법 (how to remove shared preference while application uninstall in android) 앱을 삭제 후 재설치 한 후에도 공유 환경 설정(shared preference)에서..

ddolcat.tistory.com

https://r-son.tistory.com/22

 

[Android] 안드로이드 SharedPreferences 사용법 및 예제

안녕하세요. 로이손입니다. 오늘은 SharedPreferences에 대해서 알아보고자 합니다. SharedPreferences는 앱의 데이터를 영속적으로 저장하기 위한 클래스. DBMS 방식의 데이터 영속화는 테이블 구조로 저

r-son.tistory.com