간단한 값 저장에 DB를 사용하기에는 복잡하기 때문에 SharedPreference를 사용하면 적합하다.
Key-Value 쌍으로 데이터를 저장한다.
간단한 데이터를 읽고 쓰기에 유용하다.
자동 로그인, 앱 초기 설정값, 다시보지 않기 등에 사용된다.
애플리케이션에 파일 형태로 저장된다.
data/data/패키지명/shared_prefs/SharedPreference이름.xml 위치에 저장된다.
애플리케이션이 삭제되기 전까지 보존된다. 애플리케이션이 삭제되면 저장된 정보가 날라간다.
사용법
객체 생성 및 데이터 저장
1 2 3 4 5 6 7
privateval 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()
getSharedPreference()
getSharedPreference() 함수를 통하여 SharedPreference 객체를 얻는다.
첫 번째 인자 USER_NAME은 해당 SharedPreference의 이름이다. 특정 이름으로 생성할 수 있고 해당 이름으로 xml 파일이 생성된다.
두 번째 인자는 mode이고 읽기/쓰기 권한과 관련된 mode라고 생각하면 된다.
editor 객체 얻기
editor 객체를 통해서 데이터의 읽기, 쓰기 작업을 수행한다.
데이터 저장
putString() : key-value 형태로 데이터를 저장한다.
위에서는 intKey라는 key 값으로 2라는 int형 value를 저장하고 있다.
작업이 완료되었을 때는 반드시 editor.commit()을 수행한다.
데이터 꺼내오기 및 삭제하기
1 2 3 4
privateval 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
privateval 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으로 저장한다.