데이터 저장 - SharePreferences

2024. 7. 31. 00:16[개발]/Kotlin 활용 앱 개발

# Preference 개념

- 프로그램의 설정 정보(유저의 옵션 선택 사항 / 프로그램 구성 정보 등)을 영구적으로 저장

- XML 포맷의 텍스트 파일에 키-값 세트로 저장

 

# SharePreferences 클래스

- Preferences의 데이터를 관리하는 클래스

- 프로그램 내 액티비티 간 공유 / 한쪽 액티비티에서 수정 시 다른 액티비티에서도 읽을 수 있음

- 프로그램 내 고유 정보로 외부에서 읽기 불가능

 

# 공유 환경설정의 핸들 가져오기

- 여러 개의 shared preferences 파일들을 사용하는 경우 → getSharedPreferences 메서드 사용

- 한 개의 shared preferences 파일만 사용하는 경우 → getPreferences 메서드 사용 (자주 안 씀)

- name: 데이터를 저장할 XML 파일의 이름

- mode: 파일의 공유 모드

  1) MODE_PRIVATE: 호출한 앱 내에서만 읽기 쓰기 가능

  2) MODE_WORLD_READABLE, MODE_WORLD_WRITABLE: 보안상 이유로 API level 17에서 deprecated

val sharedPref = activity?.getSharedPreferences(
    getString(R.string.preference_file_key), Context.MODE_PRIVATE)

 

# 예제

- EditText를 만들어 Text 입력 후, 저장 버튼을 눌렀다가 앱을 껐다가 다시 켜도 text가 저장되도록!

// 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/et_hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:textColor="#000000"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
// MainActivity.kt
package com.android.preference

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.android.preference.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

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

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

        binding.btnSave.setOnClickListener{
            saveData()
            Toast.makeText(this, "Data Saved.", Toast.LENGTH_SHORT).show()
        }
        loadData()
    }

    private fun saveData() {
        val pref = getSharedPreferences("pref",0)
        val edit = pref.edit() // 수정 모드
        // 1번째 인자는 키, 2번째 인자는 실제 담아둘 값
        edit.putString("name", binding.etHello.text.toString())
        edit.apply() // 저장완료
    }

    private fun loadData() {
    	// "pref" = preference 데이터를 저장할 XML 파일 이름
        val pref = getSharedPreferences("pref",0)
        // 1번째 인자(name)는 키, 2번째 인자("")는 데이터가 존재하지 않을경우의 값
        binding.etHello.setText(pref.getString("name",""))
    }
}

'[개발] > Kotlin 활용 앱 개발' 카테고리의 다른 글

사용자 위치 얻기  (0) 2024.07.31
데이터 저장 - Room  (0) 2024.07.31
Compose - 함수 / UI 구성  (0) 2024.07.30
Compose - 함수 / 레이아웃 구성  (0) 2024.07.30
Compose - 개념  (0) 2024.07.30