SharedPreferences는 Room과 마찬가지로 localDB에 데이터를 저장하는 도구라고 할 수 있습니다. 그러나 SharedPreferences는 Room에 비해 데이터가 비교적 작은 편이라 큰 DB가 필요 없는경우, 또는 임시적으로 데이터를 저장해야하는 경우에 사용됩니다.
<?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">
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/getButton"
app:layout_constraintVertical_chainStyle="packed"
android:text="저장하기"/>
<Button
android:id="@+id/getButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/saveButton"
app:layout_constraintBottom_toTopOf="@id/deleteButton"
android:text="읽어오기"/>
<Button
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/getButton"
android:text="삭제하기"/>
</androidx.constraintlayout.widget.ConstraintLayout>
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
sharedPreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
binding.saveButton.setOnClickListener {
if (binding.saveText.text.isNotEmpty()){
sharedPreferences.edit().apply(){
putString(TEXT, binding.saveText.text.toString())
apply()
}
binding.saveText.text = null
}
}
binding.getButton.setOnClickListener {
val getText = sharedPreferences.getString(TEXT, null)
binding.getText.text = getText
}
binding.deleteButton.setOnClickListener {
sharedPreferences.edit().remove(TEXT).apply()
}
}
companion object {
private const val PREFS_NAME = "sharedPreferences"
private const val TEXT = "text"
}
}
다음과 같이 간단하게 데이터를 저장하고 읽어올 수 있습니다.
주의해야 할 점은, sharedPreferences에 저장할 때 key값 하나당 하나의 value만 들어가므로,
이미 value가 저장되어 있는 key값에 다른 value가 들어갈 경우 덮어씌워지므로 이점을 주의해야합니다.