본문 바로가기

Android/공부

SharedPreferences 개념 및 사용법

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. 마무리

생각보다 쉽게 사용할 수 있는 기능이기 때문에 현재 자주 사용하고 있고, 앞으로도 자주 이용할 것 같습니다.

그렇기에 이번 시간에 잘 정리되었으면 좋겠습니다.

 

 

 

728x90
반응형