ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] 데이터 저장 - SharedPreferences
    안드로이드 2024. 4. 30. 14:56

    ✏️ TIL(Today I Learned)

    SharedPreferences 대해 알아보았다.

    이는 애플리케이션의 사용자 설정이나 간단한 데이터를 저장하기 위해 사용된다.

    EditText에 입력한 뒤, 저장 버튼을 누르면 입력한 text를 SharedPreferences로 저장했다.

    그리고, 앱을 다시 열면 저장된 text를 불러오도록 만들었다.

    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() {
            val pref = getSharedPreferences("pref",0)
            // 1번째 인자는 키, 2번째 인자는 데이터가 존재하지 않을경우의 디폴트 값
            binding.etHello.setText(pref.getString("name",""))
        }
    }

     

     


     

    📝 공부한 Kotlin 정리

    1. Preference

    • 프로그램의 설정 정보 (사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용
    • XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장한다.
      (저장된 파일의 위치는 data/data/package_name(패키지 명)/shared_prefs/저장한 이름)
    • SharedPreferences 클래스
      • Preferences의 데이터(키-값 세트)를 관리하는 클래스
      • 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다.
      • 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.

     

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

    getSharedPreferences (name, mode):

    XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장한다. 프로그램의 설정 정보 (사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용한다.

    • 여러개의 Shared Preference파일들을 사용하는 경우에 사용
    • name : 프레퍼런스 데이터를 저장할 XML 파일의 이름
    • mode : 파일의 공유 모드
      • MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
      • MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated됨
    • 사용 가능한 데이터 타입:
      • Boolean - true 또는 false 값 저장
      • Float - 실수 값 저장
      • Int - 정수 값 저장
      • Long - 큰 정수 값 저장
      • String - 문자열 값 저장
      • String Set - 문자열 집합 저장 (Set<String>)
    • 예시
      // 데이터 저장
      
      val prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
      
      prefs.edit().apply {
          putBoolean("key_boolean", true)
          putFloat("key_float", 3.14f)
          putInt("key_int", 123)
          putLong("key_long", 1234567890123456789L)
          putString("key_string", "Hello World")
          putStringSet("key_string_set", setOf("Apple", "Banana"))
          apply() // 변경 사항 적용
      }
      
      // 데이터 불러오기
      val prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
      
      val valueBoolean = prefs.getBoolean("key_boolean", false)
      val valueFloat = prefs.getFloat("key_float", 0.0f)
      val valueInt = prefs.getInt("key_int", 0)
      val valueLong = prefs.getLong("key_long", 0L)
      val valueString = prefs.getString("key_string", null)
      val valueStringSet = prefs.getStringSet("key_string_set", setOf())​​
    •  
Designed by Tistory.