Android & Kotlin

By 키워드를 이용한 Shared Preference

쉽코기 2022. 11. 18. 18:44

1.  SharedPreferences 기본 사용법

val sharedPref = getSharedPreferences("name", Context.MODE_PRIVATE)
with (sharedPref.edit()) {
	putString("key", "value")
	apply
}

 

2.  By 키워드를 통한 SharedPreferences 사용법

 

장점

  1. 값에 대한 접근, 수정이 매우 편함 (변수처럼 취급할 수 있음)
  2. 매번 getter, setter 를 구현해줄 필요가 없음
  3. SharedPreference 를 객체를 생성하거나 가져오지 않아도 됨

 

구현 방법

1. ReadWriteProperty 를 구현한 Preference class 를 정의한다

//PreferenceProperty.kt

class StringPreference(
    private val preferences: Lazy<SharedPreferences>,
    private val name: String,
    private val defaultValue: String
) : ReadWriteProperty<Any, String?> {

    @WorkerThread
    override fun getValue(thisRef: Any, property: KProperty<*>): String {
        return preferences.value.getString(name, defaultValue) ?: defaultValue
    }

    override fun setValue(thisRef: Any, property: KProperty<*>, value: String?) {
        preferences.value.edit { putString(name, value) }
    }
}

 

2. SharedPreference 객체를 생성한다.

//UserStorage.kt

@Singleton
class UserStorage @Inject constructor(
    @ApplicationContext val context: Context
) {

    private val prefs: Lazy<SharedPreferences> = lazy {
        context.applicationContext.getSharedPreferences(
            PREFS_NAME, Context.MODE_PRIVATE
        )
    }
    ...
}

 

3. by 키워드의 property delegate 를 통해 변수 정의

//UserStorage.kt

@Singleton
class UserStorage @Inject constructor(
    @ApplicationContext val context: Context
) {

    private val prefs: Lazy<SharedPreferences> = lazy {
      ...
    }
    
    var Session by StringPreference(prefs, SESSION, "")
    var isLogin by BooleanPreference(prefs, USER_LOGIN, false)
    
    companion object {
        const val SESSION = "session"
        const val USER_LOGIN = "user_login"
    }
}

 

사용 예시

// get data
val sessionCookie = userStorage.Session

// set data
userStorage.Session = cookie

 

By 키워드와 Delegate Pattern

위 구현 방식의 핵심은 by 키워드에 있고 by 키워드 는 위임 패턴을 코틀린 언어적으로 제공하고 있다.

이를 통해 정해진 방식으로만 내부 객체를 사용하도록 제한하고, 보호하는 효과를 얻을 수 있다.

해당 내용은 아래 "코틀린 by 키워드 알아보기" 에 자세히 명시 되어있다.

 

 

참고

https://jisungbin.medium.com/%EC%BD%94%ED%8B%80%EB%A6%B0-by-%ED%82%A4%EC%9B%8C%EB%93%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-54aa7252febb

 

코틀린 by 키워드 알아보기

What is the `by` keyword in Kotlin?

jisungbin.medium.com

https://velog.io/@dudgns0507/Android-by-%ED%82%A4%EC%9B%8C%EB%93%9C%EB%A5%BC-%ED%86%B5%ED%95%B4-SharedPreference-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-1

 

[Android] by 키워드를 통해 SharedPreferences 사용하기 (1)

Android에서는 Key-Value 형태의 비교적 적은 데이터를 저장하기 위한 용도로 SharedPreferences API를 제공하고 있습니다.이를 통해 Room, Realm 혹은 파일 저장 등과 같은 방법을 쓰지 않아도 간단하게 디바

velog.io