SharedPreference

  • 간단한 값 저장에 DB를 사용하기에는 복잡하기 때문에 SharedPreference를 사용하면 적합하다.
  • Key-Value 쌍으로 데이터를 저장한다.
  • 간단한 데이터를 읽고 쓰기에 유용하다.
  • 자동 로그인, 앱 초기 설정값, 다시보지 않기 등에 사용된다.
  • 애플리케이션에 파일 형태로 저장된다.
    • data/data/패키지명/shared_prefs/SharedPreference이름.xml 위치에 저장된다.
  • 애플리케이션이 삭제되기 전까지 보존된다. 애플리케이션이 삭제되면 저장된 정보가 날라간다.

사용법

  1. 객체 생성 및 데이터 저장
1
2
3
4
5
6
7
private val USER_NAME : String = "Woo"

val pref : SharedPreference = getSharedPreference(USER_NAME, MODE_PRIVATE)
val editor : SharedPreference.Editor = pref.eidt()
editor.putString("key", "value")
editor.putInt("intKey",2)
editor.commit()
  1. getSharedPreference()
  • getSharedPreference() 함수를 통하여 SharedPreference 객체를 얻는다.
  • 첫 번째 인자 USER_NAME은 해당 SharedPreference의 이름이다. 특정 이름으로 생성할 수 있고 해당 이름으로 xml 파일이 생성된다.
  • 두 번째 인자는 mode이고 읽기/쓰기 권한과 관련된 mode라고 생각하면 된다.
  1. editor 객체 얻기
  • editor 객체를 통해서 데이터의 읽기, 쓰기 작업을 수행한다.
  1. 데이터 저장
  • putString() : key-value 형태로 데이터를 저장한다.
    • 위에서는 intKey라는 key 값으로 2라는 int형 value를 저장하고 있다.
    • 작업이 완료되었을 때는 반드시 editor.commit()을 수행한다.
  1. 데이터 꺼내오기 및 삭제하기
1
2
3
4
private val USER_NAME : String = "Woo"

val pref : SharedPreference = getSharedPreference(USER_NAME, MODE_PRIVATE)
pref.getString("key","")
  • 위의 코드에서는 getString()을 통해서 원하는 데이터를 Key 값을 이용해서 찾아 꺼낼 수 있다.
  • 그리고 해당 Key로 저장된 값이 없다면 default로 지정한 " " 값이 꺼내지게 된다.
1
2
3
4
5
6
7
private val USER_NAME : String = "Woo"

val pref : SharedPreference = getSharedPreference(USER_NAME, MODE_PRIVATE)
val editor : SharedPreference.Editor = pref.eidt()
pref.remove("key")
pref.clear()
pref.commit()
  • pref.remove() : Key값으로 삭제할 데이터를 찾아서 삭제한다.
  • pref.clear() : USER_NAME으로 된 객체의 모든 정보(데이터)를 삭제한다.

이렇게 SharePreference를 사용하면 간단한 데이터를 저장하야 사용할 수 있고 자동 로그인과 같은 기능을 구현할 수 있다. 즉, 간단한 값을 저장하여 계속 유지되도록 하고 싶을 때 사용하기 좋다.

저는 SharedPreference를 Object 즉, static하게 만들어서 어디서든 접근할 수 있도록 사용하고 있다. 이렇게 구현해야 저장한 값을 어디서든 불러와서 사용할 수 있기 때문이다.

추가 - 객체 저장하기

1
2
3
4
5
6
7
8
9
10
11
12
13
// 데이터 저장
var mPref : SharedPreference = getPreference(MODE_PRIVATE)
var eidtor : SharedPreference.Editor = mPref.editor()
var gson = Gson()
var json : String = gson.toJson(MyObject) // gsont을 json 형식으로 변환
editor.putString("MyObject", json) // json 객체 저장
editor.commit()

// 데이터 꺼내오기
var gson = Gson()
var json : String = mPref.getString("MyObject","")
var obj : MyObject = gson.fromJson(json, MyObject::class.java)
// fromJson 함수를 통해서 json 객체를 꺼내와서 MyObject 클래스의 형태처럼 gson으로 저장한다.