코딩하는 일용직 노동자

Kotpref 를 이용해 SharedPreferences 를 더 쉽게 이용해보자. 본문

안드로이드

Kotpref 를 이용해 SharedPreferences 를 더 쉽게 이용해보자.

bacass 2020. 5. 2. 17:09

SharedPreferences 는 정말 편리한 도구입니다.
아이디, 비밀번호, 이메일, 간단한 설정값 등을 저장하고 꺼내올 수 있습니다.
SharedPreferences 를 사용하려면 약간의 코드가 필요합니다. 

SharedPreferences prefs = getPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();


때문에 SharedPreferences 를 처리하는 별도의 클래스를 만들어두고 사용하는 경우가 많습니다.

Kotpref 는 이런 SharedPreferences 를 간단하고 쉽게 구현할 수있는 라이브러리입니다.
https://github.com/chibatching/Kotpref

 

chibatching/Kotpref

Kotpref - Android SharedPreferences delegation library for Kotlin - chibatching/Kotpref

github.com

우선 설치를 위해 build.gradle에 앱 종속성을 추가합니다.

// kotpref
implementation "com.chibatching.kotpref:kotpref:2.8.0"
implementation 'com.chibatching.kotpref:gson-support:2.8.0'


그리고 Application 클래스에서 Kotpref.init(context) 함수를 호출합니다.
Gson 도 함께 이용할 수 있도록 셋팅하겠습니다.

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        Kotpref.init(this)
        Kotpref.gson = Gson()
    }
}


Kotpref 는 SharedPreferences 에 저장하기 위해 데이터 모델을 정의해야합니다. 
KotprefModel 을 상속받아서 아래와 같이 데이터 모델을 만들 수 있습니다 .

import com.chibatching.kotpref.KotprefModel
import com.chibatching.kotpref.gsonpref.gsonPref
import java.util.HashMap

object AppPrefs : KotprefModel() {
    var pushToken: String by stringPref()

    var userName: String by stringPref()
    var userNickname: String by stringPref()
    var userAge: Int by intPref(0)
    var money: Long by longPref(1L)
    var isMarried: Boolean by booleanPref(false)

    var userList: List by gsonPref(listOf())
    var ageMap: HashMap<String, Int> by gsonPref(hashMapOf())
}


코틀린에서는 object로 클래스를 정의하면, 싱클톤(Singleton) 패턴이 적용되어 객체가 한번만 생성됩니다.
이제 일반 속성 액세스와 동일한 방식으로 쓰고 읽을 수 있습니다.

private fun prefTest() {
    AppPrefs.pushToken = "ask1291kd892md9_ai8sm"
    AppPrefs.userName = "이지은"
    AppPrefs.userNickname = "아이유"
    AppPrefs.userAge = 30
    AppPrefs.money = 65200000
    AppPrefs.isMarried = false

    AppPrefs.userList = listOf(
        UserData(20, "홍길동", "남", "01012345678"),
        UserData(14, "사나", "여", "010여23456789"),
        UserData(20, "유인나", "", "010여98765432"),
        UserData(34, "최성민", "남", "01098562438")
    )

    AppPrefs.ageMap = hashMapOf(
        "이시윤" to 3, "홍길동" to 20, "김수인" to 28
    )
}

private fun prefPrint() {
    println("AppPrefs.pushToken: ${AppPrefs.pushToken}")
    println("AppPrefs.userName: ${AppPrefs.userName}")
    println("AppPrefs.userNickname: ${AppPrefs.userNickname}")
    println("AppPrefs.userAge: ${AppPrefs.userAge}")
    println("AppPrefs.money: ${AppPrefs.money}")
    println("AppPrefs.isMarried: ${AppPrefs.isMarried}")

    println("AppPrefs.userList: ${AppPrefs.userList}")
    println("AppPrefs.ageMap: ${AppPrefs.ageMap}")
}


사용방법은 너무나 쉽습니다.
List 와 HashMap 도 쉽게 저장하고 꺼내올 수 있습니다.

Kotpref 코어 모듈은 기본 SharedPreferences 값 유형 (String, Int, Long, Float, Boolean, String set) 만 지원합니다. 
kotlin enum 및 gson 객체를 지원하는 하위 모듈이 있습니다.


테스트에 사용한 프로젝트는 GitHub에서 확인하실 수 있습니다.
https://github.com/Bacass/MySharedPreferencesExam

 

Bacass/MySharedPreferencesExam

Android SharedPreferences Exam. Contribute to Bacass/MySharedPreferencesExam development by creating an account on GitHub.

github.com