TIL240123 D45 SharedPreferences

jericho·2024년 1월 23일

TIL

목록 보기
39/62

새로운 팀원을 만났다. 슈퍼맨이라 불리는 분과 같은 조가 되었다. 벌써부터 범상찮은 포스가 보인다. 나도 더욱 열심히 해야겠다는 마음이 절로 생긴다.

SharedPreferences

  • Preference란?

앱 설정 등 데이터를 영구 저장하기 위해 사용. XML 포맷의 텍스트 파일에 키-값 세트로 저장한다.

  • SharedPreferences 클래스

프레퍼런스의 데이터(키-값 세트)를 관리하는 클래스.
응용 프로그램 내 액티비티간 공유. 한 액티비티가 수정 시 다른 액티비티에서도 읽을 수 있다.
외부에서는 읽을 수 없다.

//
private fun saveData() {
    // pref.xml로 저장됨
    // mode에 원래 Context.MODE_PRIVATE 넣는데, 이게 0이라 그냥 0 넣음
    val pref = getSharedPreferences("pref", 0)  // 이거 파일명도 전역으로 관리해야겠네
    val edit = pref.edit()  // 수정 모드
    edit.putString("name", binding.et1.text.toString())  // 이거 키값도 전역으로 관리해야겠네
    edit.apply()  // 저장 완료
}

private fun loadData() {
    val pref = getSharedPreferences("pref", 0)
    binding.tv1.text = pref.getString("name", "nothing to get")  // defValue는 없을 경우 대체제.
}

// SharedPreferences는 싱글톤이라서 이렇게 호출해도 별로 문제 없다고 함.
private fun loadData2() = getSharedPreferences("pref", 0)
    .getString("name", "nothing to get")


// 프래그먼트 기준. 액티비티는 requireContext(). 만 지우면 된다.
private fun savePref(key: String, value: String) = requireContext()
    .getSharedPreferences(Extra.pref, 0).edit().putString(key, value).apply()

private fun loadPref(key: String, defValue: String? = null) = requireContext()
    .getSharedPreferences(Extra.pref, 0).getString(key, defValue)

SharedPreferences 객체는 싱글톤으로, getSharedPreferences를 매번 호출해도 딱히 문제 없다고 한다. pref 변수를 따로 만들어 관리하지 않아도 될듯.

0개의 댓글