본문 바로가기
Android & Kotlin/Android

[코틀린] 안드로이드 sharedpreferences 개념 및 활용 예제

by 말린밴댕이_공부 2022. 12. 3.
반응형

 

SharedPreferences란?

DB에 저장해야할 정도의 데이터의 양이 많으것이 아닌 간단한 설정값이나 문자열과 같은것을 저장하기 위해 DB의 사용이 부담될때 SharedPreferences를 사용하는것이 적합함

SharedPreferences의 특징

  • 초기 설정값이나 자동 로그인 여부 등 간단한 값을 DB에 넣지 않고 저장하기 위해 사용
  • key-value방식을 사용
  • 저장 경로:  data/data/패키지명/shared_prefs/SharedPreference명.xml 에 저장.

 

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    val binding by lazy {ActivityMainBinding.inflate(layoutInflater)}

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)


        val sharedPreferences = getSharedPreferences("Info", MODE_PRIVATE)
        /*
        public abstract SharedPreferences getSharedPreferences (String name, int mode)
        -> 'name' 내용을 검색하고 유지하여 해당 값을 검색하고 수정할 수 있는 sharedpreferneces를 반환
        name -> String : 원하는 기본 설정 파일
        mode -> int : 작동 모드 .MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_APPEND
        MODE_PRIVATE -> 파일 생성 모드: 생성된 파일은 호출 애플리케이션
        (또는 동일한 사용자 ID를 공유하는 모든 애플리케이션)에서만 액세스할 수 있는 기본 모드입니다.
         */


        with(binding){
            //데이터 저장하기
            buttonSave.setOnClickListener {
                val editor : SharedPreferences.Editor = sharedPreferences.edit()
                with(binding){
                    editor.putString("infoId",editTextId.text.toString()) //값 입력
                    editor.putString("infoPassword",editTextPassword.text.toString()) //값 입력

                    editor.commit() //저장
                }
            }

            //데이터 불러오기
            buttonLoad.setOnClickListener {
                val id = sharedPreferences.getString("infoId","id")
                val password = sharedPreferences.getString("infoPassword","password")
                Log.d("sharedpreferences","저장된 값은"+ id)
                Log.d("sharedpreferences","저장된 값은"+ password)


            }

            //데이터 삭제하기
            buttonDelete.setOnClickListener {
                val editor = sharedPreferences.edit()
                editor.remove("infoId")
                editor.remove("infoPassword")
                editor.commit()

                // 삭제된 후 값을 받았을때
                val id = sharedPreferences.getString("infoId","id")
                val password = sharedPreferences.getString("infoPassword","password")
                textViewId.setText("근육이 입력한 id : " + id)
                textViewPassword.setText("근육이 입력한 password : " + password)

                // 로그를 찍어보면 삭제됨을 알 수있다.
                Log.d("sharedpreferences","저장된 값은 "+ id)
                Log.d("sharedpreferences","저장된 값은 "+ password)

            }

        }

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editTextId"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:layout_marginStart="100dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="100dp"
        android:ems="10"
        android:hint="아이디를 입력하세요."
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.487"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextPassword"
        android:layout_width="0dp"
        android:layout_height="60dp"
        android:layout_marginStart="100dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="100dp"
        android:ems="10"
        android:hint="비밀번호를 입력하세요."
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextId" />

    <Button
        android:id="@+id/buttonSave"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="100dp"
        android:layout_marginTop="23dp"
        android:layout_marginEnd="100dp"
        android:text="값 저장하기"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextPassword" />

    <Button
        android:id="@+id/buttonLoad"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="100dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="100dp"
        android:text="값 불러오기"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonSave" />

    <Button
        android:id="@+id/buttonDelete"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="100dp"
        android:layout_marginTop="15dp"
        android:layout_marginEnd="100dp"
        android:text="값 삭제하기"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonLoad" />

    <TextView
        android:id="@+id/textViewId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonDelete" />

    <TextView
        android:id="@+id/textViewPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textViewId" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

기본적으로 우리가 활용하면서 sharedpreferences의 사용 사례는 간단한 값들을 저장하기 위합입니다.

대표적으로 세가지의 형태로 저장하기, 불러오기, 삭제하기 로 나눠집니다.

 

Log로 처음에 찍어보다가 직접 표현을 했습니다.

 

값 저장하기

데이터를 ID와 Password를 진행해 sharedpreference를 이용하여 저장한다

ID : hello , Password : mynameisgyroh

 

 

데이터 불러오기

sharedpreference에 저장된 데이터를 불러왔을때 아래 텍스트에

저장된 ID인 hello와 Password인 mynameisgyroh가 불러와진다.

 

 

값 삭제하기

 

 

[참조]

https://developer.android.com/training/data-storage/shared-preferences?hl=ko 

 

키-값 데이터 저장  |  Android 개발자  |  Android Developers

키-값 데이터 저장 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용해야 합니다. SharedPre

developer.android.com

 

 

 

 

반응형

댓글