SharedPreference란 무엇인가?

SharedPreference는 Key와 Value 형태로 put과 get 메소드를 사용하여 데이터를 저장 하고 불러올수 있는 안드로이드에서 제공해주는 저장 API이다.

사용법이 간단해서 보통 저장하려는 키-값 컬렉션이 작은경우(앱의 설정값, 세션 정보 등)일 때 사용을 한다.

값을 저장하게 되면 안드로이드 파일 시스템 안에 xml 파일에 담겨진다

getSharedPreferences() vs getPreferences()

Sharedpreferences를 사용하기 전에 먼저 preference와 혼동 해서는 안된다. 본질적으론 둘다 key/value 값을 이용해서 값을 저장한다 하지만

안드로이드 문서에 따르면 다음과 같은 차이가 있다고 한다.

쉽게 말하자면 여러 Activity에서 값을 저장하거나 불러 올것이다 할꺼면 SharedPrefereces를 쓰는것이고 하나의 Activity에서만 쓸것이다 하면 Preferences를 쓰는것이다

내부 코드를 보면 둘의 차이를 알수 있다.

다음과 같이 getPreference는 현재 위치한 LocalClass이름 값을 getSharedPreferences로 리턴한다.

이제 둘의 차이를 알아보았으니 사용법을 코드를 통해서 알아보자

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val prefs = getPreferences(MODE_PRIVATE)
        prefs.edit { 
            putBoolean("firstBoolean", true)
            putInt("firstInt", 1)
        }
        val firstBoolean = prefs.getBoolean("firstBoolean", false)
        val firstInt = prefs.getInt("firstInt", 0)

        val shared = getSharedPreferences("shared", MODE_PRIVATE)
        shared.edit {
            putBoolean("secondBoolean", false)
            putInt("secondInt", 2)
        }
        val secondBoolean = shared.getBoolean("secondBoolean", true)
        val secondInt = shared.getInt("secondInt", 0)

        Log.e("####First####", "firstBoolean : $firstBoolean  firstInt: $firstInt")
        Log.e("####Second####", "secondBoolean : $secondBoolean  secondInt: $secondInt")
    }
}

/*
E/####First####: firstBoolean : true  firstInt: 1
E/####Second####: secondBoolean : false  secondInt: 2
*/

위 코드는 getPreferencesgetSharedPreferences를 불러와 각각의 객체를 생성하고 코틀린에서 제공 하는 확장함수 edit을 사용해 파일을 저장한다.