Android/Kotlin

안드로이드 SharedPreferences Manager

easy-1 2021. 10. 26. 15:21

<개요>

로컬 데이터 읽기, 쓰기에 자주 사용되는 SharedPreferences 를 좀 더 효율적으로 사용하기 위함


<적용방법>

1. PrefManager object 생성

object PrefManager {

    private var pref: SharedPreferences? = null

    fun init(context: Context) {
        if (pref == null) pref =
            context.getSharedPreferences(PREF_NAME, Activity.MODE_PRIVATE)
    }

    // String
    fun read(key: String?, defValue: String?): String? {
        return pref!!.getString(key, defValue)
    }

    fun write(key: String?, value: String?) {
        val prefsEditor = pref!!.edit()
        prefsEditor.putString(key, value)
        prefsEditor.apply()
    }


    // Boolean
    fun read(key: String?, defValue: Boolean): Boolean {
        return pref!!.getBoolean(key, defValue)
    }

    fun write(key: String?, value: Boolean) {
        val prefsEditor = pref!!.edit()
        prefsEditor.putBoolean(key, value)
        prefsEditor.apply()
    }


    // Int
    fun read(key: String?, defValue: Int): Int {
        return pref!!.getInt(key, defValue)
    }

    fun write(key: String?, value: Int?) {
        val prefsEditor = pref!!.edit()
        prefsEditor.putInt(key, value!!).apply()
    }
}

2. Application 을 상속받은 클래스에서 초기화 작업 진행

- 해당 코드는 Hilt 를 사용중이여서 @HiltAndroidApp 이 선언되어 있음

@HiltAndroidApp
class GlobalApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        // SharedPreferences
        PrefManager.init(applicationContext)
        
        // ...
    }
}

3. 사용하고자 하는 곳에서 호출

- 해당 코드에서는 Hilt 와 DataBinding을 적용한 코드임

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val viewModel by viewModels<MainViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        // write
        PrefManager.write(PREF_NAME, "data")
        // read
        PrefManager.read(PREF_NAME, "")
    }
}