새로운 팀원을 만났다. 슈퍼맨이라 불리는 분과 같은 조가 되었다. 벌써부터 범상찮은 포스가 보인다. 나도 더욱 열심히 해야겠다는 마음이 절로 생긴다.
앱 설정 등 데이터를 영구 저장하기 위해 사용. XML 포맷의 텍스트 파일에 키-값 세트로 저장한다.
프레퍼런스의 데이터(키-값 세트)를 관리하는 클래스.
응용 프로그램 내 액티비티간 공유. 한 액티비티가 수정 시 다른 액티비티에서도 읽을 수 있다.
외부에서는 읽을 수 없다.
//
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 변수를 따로 만들어 관리하지 않아도 될듯.