본문 바로가기
안드로이드 코틀린

[Kotlin][Android] SharedPreference 사용법

by teamnova 2021. 8. 24.

 

SharedPreference란?

 SharedPreferences는 간단한 값을 저장할 때 주로 사용합니다. 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장할 때 DB를 사용하면 복잡하기 때문에 SharedPreferences를 사용하면 적합합니다.

 

 SharedPreferences는 어플리케이션에 파일 형태로 데이터를 저장한다. 데이터는 (key, value) 형태로 data/data/패키지명/shared_prefs 폴더 안에 xml 파일로 저장된다. 해당 파일은 어플리케이션이 삭제되기 전까지 보존된다.

 

SharedPreference 사용하기

 

 SharedPreferences는 앱의 어디서든 전역적으로 사용하기 때문에 싱글톤 패턴을 사용해서 어디서든 접근 가능하게 만드는 것이 좋습니다.

 

 

https://stickode.com/detail.html?no=2357

 

스틱코드

 

stickode.com

 

먼저 build.gradle에 들어가 kotlin-android-extensions 플러그인을 추가해주고 Sync Now를 클릭해줍니다.

 

plugins {
 ...
    id 'kotlin-android-extensions'
 ...
}

 

 

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:hint="Please write words"
        android:id="@+id/xml_main_edt_save" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/xml_main_btn_save" />

</LinearLayout>

 

 

SharedPreferences 클래스는 앱에 있는 다른 액티비티보다 먼저 생성되어야 다른 곳에 데이터를 넘겨줄 수 있다. 이러기 위해서는 Application에 해당하는 클래스를 생성한 뒤, 전역 변수로 SharedPreferences를 가지고 있어야 한다. Application()을 상속받는 클래스를 생성하여, onCreate()보다 먼저 prefs를 초기화 해준다.

 

App.kt

import android.app.Application

class App : Application() {

    companion object {
        lateinit var prefs : MySharedPreferences
    }

    override fun onCreate() {
        prefs = MySharedPreferences(applicationContext)
        super.onCreate()
    }
}

 

App클래스를 생성했다면, Manifest에 등록해줘야 합니다.

 <application
 	...
        android:name=".App"
 	...
 </application>

 

 

activity_main.xml에 있던 Editbox에 저장된 문장을 아래의 Class에서 저장하거나 저장되어 있는 문장을 도출하는 기능을 하는 SharedPreferences Class를 생성합니다.

 

MySharedPreferences.kt

import android.content.Context
import android.content.SharedPreferences

class MySharedPreferences(context: Context) {

    private val prefsFilename = "prefs"
    private val prefsKeyEdt = "myEditText"
    private val prefs: SharedPreferences = context.getSharedPreferences(prefsFilename, 0)

    var myEditText: String?
        get() = prefs.getString(prefsKeyEdt, "")
        set(value) = prefs.edit().putString(prefsKeyEdt, value).apply()
}

 

 

MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        xml_main_edt_save.setText(App.prefs.myEditText)

        xml_main_btn_save.setOnClickListener {
            App.prefs.myEditText = xml_main_edt_save.text.toString()
        }
    }
}

 

 

SharedPreference 기능을 사용하여 문장을 데이터로 저장하고 불러오는 예제 프로그램을 구성해봤습니다.

 

sharedPreference 파일

prefs.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="myEditText">스틱코드 저장</string>
</map>