1. 정의
간단한 데이터의 저장을 목적으로 사용합니다.
SharedPreferences는 내부 저장소를 이용하기 때문에 권한 설정이 필요 없고 간단한 코드로 사용할 수 있습니다.
(이때 꼭 뒤에 s를 붙여야 합니다. SharedPreference's')
주로 로그인 정보나 앱의 상태 정보를 저장하는 용도로 사용되며, 액티비티에서 인텐트에 값을 넣고 빼는 것과 비슷한 형태로 동작합니다.
2. 사용법
1) Editor로 데이터 저장하기
fun setSharedData(name: String, key: String, data: Int) {
var pref: SharedPreferences = getSharedPreferences(name, Activity.MODE_PRIVATE)
var editor: SharedPreferences.Editor = pref.edit()
editor.putInt(key, data)
editor.apply()
}
a. getSharedPreferences
getSharedPreferences() 메서드는 Context를 가지고 있는 모든 컴포넌트에서 호출이 가능합니다. 여기서 이름과 모드를 호출하면 이에 상응하는 SharedPreferences가 반환됩니다.
이름은 키로 사용되며, 추후에 값을 가져올 때 이때 사용된 이름을 키 값으로 사용합니다.
모드는 간단히 이 저장소에 저장한 값을 어떻게 다룰 것인가를 지정하는 것입니다.
MODE_PRIVATE가 디폴트이며, 이때 저장된 값은 오직 같은 userID를 공유하는 앱에서만 호출되고 접근할 수 있습니다.
주의해야 할 사항으로는, API 레벨 17 이상부터는 MODE_WORLD_READABLE 과 MODE_WORLD_WRITEABLE 모드가 지원이 중단되었습니다. 따라서 해당 앱에서 이 저장소에 저장된 값을 다른 앱과 공유해야 한다면 FileProvider를 사용하면 됩니다.
b. edit()
SharedPreferences 객체에 edit() 메서드를 통해 Editor 인터페이스를 사용합니다.
editor의 메서드(본 예시에선 putInt()) 를 사용해 '키'에 '값'을 넣습니다.
그리고 commit 혹은 apply를 하면 데이터를 저장할 수 있습니다.
이때 commit은 변경한 업데이트를 파일에 동기적으로 저장합니다. 동기 작업이기 때문에 메인 스레드를 사용하는 터라 화면이 잠시 멈출 수 있으며, 따라서 UI 스레드에서 호출하는 것을 피해야 합니다.
apply는 변경한 업데이트를 파일에 비동기적으로 저장합니다. 따라서 특별한 경우가 아니라면 apply() 메서드를 사용하는 것이 좋습니다.
2) 데이터 가져오기
fun getSharedIntData(name: String, key: String): Int {
var pref: SharedPreferences = getSharedPreferences(name, Activity.MODE_PRIVATE)
return pref.getInt(key, 0)
}
이름과 키에 해당하는 데이터를 가져옵니다.
먼저 getSharedPreferences 메서드를 통해 Sharedpreferences 객체를 가져오고, 이후 getOOO 메서드를 사용해 키에 상응하는 값을 가져옵니다.
이때 해당 키에 상응하는 데이터가 없다면 두 번째 파라미터에 적힌 디폴트 값을 반환합니다.
3. 마무리
생각보다 쉽게 사용할 수 있는 기능이기 때문에 현재 자주 사용하고 있고, 앞으로도 자주 이용할 것 같습니다.
그렇기에 이번 시간에 잘 정리되었으면 좋겠습니다.
'Android > 공부' 카테고리의 다른 글
onNewIntent 개념 및 사용법 (0) | 2021.12.31 |
---|---|
툴바(Toolbar) 내부 텍스트뷰(TextView) 문자열 가운데로 배치하는 법 (0) | 2021.12.26 |
ListView와 RecyclerView의 차이점 (0) | 2021.12.17 |
안드로이드 화면 전환 애니메이션(+ 화면에 보이는지 여부에 따라 애니메이션 다르게 설정) (0) | 2021.12.09 |
에디트텍스트(EditText) 관련 짜투리 지식 2 (한 줄로 입력받기, 엔터키 이벤트, 키보드 사라지게 만들기) (0) | 2021.12.08 |