728x90
SharedPreferences란?
안드로이드 앱 개발을 진행하다 보면, 앱의 데이터들을 저장하여 관리해야 할 상황이 존재한다. 데이터의 양이 많거나 중요 데이터의 경우 서버나 DB에 저장해야겠지만, 간단한 설정 값이나 문자열 같은 데이터를 저장하기 위해 DB를 사용하기는 부담스럽기 때문에 SharedPreferences를 사용하는 것이 적합하다.
SharedPreferences의 특징
- 보통 초기 설정값이나 자동 로그인 여부 등 간단한 값을 저장하기 위해 사용
- Application에 파일 형태로 데이터를 저장한다.
- Application이 삭제되기 전까지 저장한 데이터가 보존된다.
- Key-value 방식
MODE의 종류
- MODE_PRIVATE : 생성한 Application에서만 사용 가능하다.
- MODE_WORLD_READABLE : 외부 App에서 사용 가능, But 읽기만 가능
- MODE_WORLD_WRITEABLE : 외부 App에서 사용 가능, 읽기/쓰기 가능
대부분은 MODE_PRIVATE를 많이 사용한다.
사용 예시
binding.btnSave.setOnClickListener { //데이터 저장 버튼 눌렸을 때
val sharedPreferences = getSharedPreferences("파일이름", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putString("key",binding.editText.text.toString()) //"key" ,"value" 형태 값을 가져올 때 "key" 가 맞아야함
editor.apply() //or commit() // apply() or commit()을 해줘야 적용됨
Toast.makeText(this, "데이터 저장 완료", Toast.LENGTH_SHORT).show()
}
val sharedPreferences = getSharedPreferences("EditText", Context.MODE_PRIVATE)
binding.editText.setText(sharedPreferences.getString("key", "디폴트 값"))
binding.btnDelete.setOnClickListener {//데이터 삭제 버튼 눌렸을 때
val sharedPreferences = getSharedPreferences("EditText", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.clear()//데이터 삭제
editor.apply()//적용
Toast.makeText(this, "데이터 삭제", Toast.LENGTH_SHORT).show()
binding.editText.setText("")
}
}
override fun onResume() {
getSharedPreferences("파일이름", Context.MODE_PRIVATE).run {
binding.editText.setText(getString("key", "디폴트 값"))
}
super.onResume()
}
데이터를 저장할 때, commit() 보다는 apply() 가 권장된다.
(commit()은 동기 처리라서 상황에 따라 안좋은 선택이 될수 있음)
람다식으로도 사용 가능하다. (람다식 edit{} 은 디폴트로 apply() 가 적용됨)
binding.btnSave.setOnClickListener {
getSharedPreferences("파일이름", Context.MODE_PRIVATE).edit {
//putString("key","value")
putString("EditText", binding.editText.text.toString())
}
Toast.makeText(this, "데이터 저장", Toast.LENGTH_SHORT).show()
}
binding.btnDelete.setOnClickListener {
getSharedPreferences("파일이름", Context.MODE_PRIVATE).edit {
clear()
}
binding.editText.setText("")
Toast.makeText(this, "데이터 삭제", Toast.LENGTH_SHORT).show()
}
}
override fun onResume() {
getSharedPreferences("파일이름", Context.MODE_PRIVATE).run {
binding.editText.setText(getString("EditText", "디폴트 값"))
}
super.onResume()
}