본문 바로가기
Android 개발/Android

SharedPreference 로 간단한 데이터 저장하기 # Android

by Developer88 2023. 4. 27.
반응형

안드로이드 개발을 하면서 간단한 key-value 형태의 값들을 앱안에 저장할 때가 있는데요.

예를 들면, 앱의 글자 크기설정, 알람 온오프 같은 값입니다.

그런데, 이럴때마다 DB를 사용하는 것은 너무나 무거운 일인데요.

SharedPreference를 사용하면 좀더 가볍고, 쉽게 해결할 수 있습니다.

 

1. SharedPreference 는?

SharedPreference는 비교작 작은 크기의 키-밸류값을 읽고 쓸수 있도록 Android Framework에서 제공해주는 기능입니다.

위에서 애기한것처럼, 설정 값등을 저장 하는데 많이 사용 하구요.

경우에 따라서 private하게 사용하거나, share될 수 있도록 할 수 있습니다.

 

2. SharedPreference 초기화

먼저 SharedPreference 객체를 얻을 수 있도록 init 함수를 아래와 같이 만들어 주고,

context를 인자로 받아서, getSharedPreferences함수로 해당 객체를 얻어옵니다.

 

SharedPreferences를 얻어오면서,

private하게할지 share할지 두번째 인자를 넘겨주면서 정할 수 있는데요.

Context.MODE_PRIVATE은 private해서 다른앱에서 접근하지 못하도록하는 것이구요,

MODE_WORLD_READABLE 이나, MODE_WORLD_WRITEABL 로 설정하면,

외부 앱에서도 파일의 위치만 알면 접근할 수 있게 됩니다.

(하지만 그럴일이 흔하지는 않겠지요.)

 

Kotlin의 object 키워드를 이용하면, 해당 클래스의 Singleton객체를 생성해 주는데요.

이렇게 해주면, App에서 한번만 초기화해서 객체를 얻은 다음,

여러번 초기화할 필요없이 계속해서 해당 객체를 가지고 사용할 수 잇게 됩니다.

참고로 오래되기는 하였지만, 싱글턴 패턴에 대한 설명은 아래 링크를 참조해 볼 수 있습니다.

>>> Singleton 패턴에 대해서 <<<

 

object SharedPrefsUtil {
    private const val SHARED_PREFS_FILE_NAME = "shared_prefs_file"
    private const val MODE = Context.MODE_PRIVATE
    private lateinit var sharedPrefs: SharedPreferences
    
    fun init(context: Context) {
        mSharedPrefs = context.getSharedPreferences(SHARED_PREFS_FILE_NAME, MODE)
    }
}

 

 

3. 업데이트하기

SharedPreference파일에 key-vaule값을 저장할 수 있게 해주는 것이,

edit()함수로 얻을 수 있는 SharedPreferences.Editor 객체인데요.

 

SharedPreference 를 업데이트 할 때는 아래와 같이 edit()함수로,

SharedPreferences.Editor 객체를 얻어와서 editor 변수에 저장하구요.

인자로 받아온 mapper 함수에 editor를 인자로 넘겨줍니다.

그리고 이 editor에 apply()함수를 적용하면 업데이트가 됩니다.

 

object SharedPrefsUtil {
    ...

    private inline fun SharedPreferences.update(mapper: (editor: SharedPreferences.Editor) -> Unit) {
        val editor = this.edit()  
        mapper(editor)  
        editor.apply()
    }
}

 

 

4. Setter-Getter 메소드 만들기

이제 원하는 키-밸류 값을 사용할 수 있도록,  Setter와 Getter메소드를 만들면 되는데요.

SharedPreferences의 객체인 sharedPrefs의 getInt와 같이 get+Type명으로 된 함수를 이용해 주면 되구요.

이 때 두번째 인자로 들어가는 값은 디폴트 값입니다.

set할 때는 update 함수를 사용해 주면 되는데요.

put+Type 명으로 된 함수를 사용하면 됩니다. 

아래에서는 위에서 정의했던 람다함수를 이용해서 구현해 보았습니다.

 

private const val KEY_SCREEN_SIZE = "key_screen_size"
private const val DEFAULT_SCREEN_SIZE: Int = 500

var screenSize: Int
    get() = sharedPrefs.getInt(KEY_SCREEN_SIZE, DEFAULT_SCREEN_SIZE)
    set(value) = sharedPrefs.update {
        it.putInt(KEY_SCREEN_SIZE, value)
    }

 

 

5. Activity에서 사용하기

5-1. 초기화

이제 위에서 만든 SharedPrefManager를 사용해서,

Activity에서 에 값을 저장해 보고 사용해 보겠습니다.

먼저 할 것은 SharedPreference를 초기화 하는 것 인데요.

아래코드로 초기화 해주면 됩니다.

 

위에서 Singleton으로 만들었으므로,

Application에서 한번만 초기화한다음 계속 사용해주면 되는데요.

Applicaton 클래스를 상속받은 클래스에서 초기화해주면 효율적이겠지요.

 

SharedPrefsUtil.init(this)

 

이제 이것을 SharedPreference를 이용해서 set 하거나 get 해주기만 하면 되는데요.

set 할 때는 아래와 같이 간단하게 하면 되구요.

 

SharedPrefsUtil.screenSize = 800

 

get 할 때에도 아래 코드면 됩니다.

 

val screenSize = SharedPrefsUtil.screenSize

 

이상으로 Android의 SharedPreference 를 이용해서 간단한 데이터를 저장하는 방법에 대해서 정리해 보았습니다.

728x90

댓글