[Android/Kotlin] SharedPreferences
📌 Preference?
- 프로그램의 설정 정보 (사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용
- XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장.
- SharedPreferences 클래스
- Preferences의 데이터(키-값 세트)를 관리하는 클래스
- 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다.
- 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.
공유 환경설정의 핸들 가져오기
getSharedPreferences
(name, mode)
- 여러개의 Shared Preference파일들을 사용하는 경우
- name : 프레퍼런스 데이터를 저장할 XML 파일의 이름이다.
- mode : 파일의 공유 모드
- MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
- MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated됨
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
사용 가능한 데이터 타입
SharedPreferences 클래스
- 프레퍼런스의 데이터(키-값 세트)를 관리하는 클래스
- 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다.
- 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.
XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장.
프로그램의 설정 정보 (사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용
getPreferences
- 한개의 Shared Preference 파일을 사용하는 경우
- Activity 클래스에 정의된 메소드 이므로, Activity 인스턴스를 통해 접근 가능
- 생성한 액티비티 전용이므로 같은 패키지의 다른 액티비티는 읽을 수 없다.
- 액티비티와 동일한 이름의 XML 파일 생성
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
👨🏻💻 연습한 코드
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.test_sharedpreferneces.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
companion object {
val PREFERENCES_FILE_NAME: String = "pref_file_name"
val PREFERENCES_KEY : String = "key_name"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.apply {
btnSave.setOnClickListener {
saveData()
Toast.makeText(this@MainActivity,"Data Saved.",Toast.LENGTH_SHORT).show()
}
}
loadData()
}
private fun loadData() { // 데이터 받아오기
val pref = getSharedPreferences(PREFERENCES_FILE_NAME,0)
binding.etHello.setText(pref.getString(PREFERENCES_KEY,""))
}
private fun saveData() { // 데이터 저장하기
val pref = getSharedPreferences(PREFERENCES_FILE_NAME, 0)
val edit = pref.edit() // 수정모드
// 첫번째 인자 -> Key
// 두번째 인자 -> 넣어줄 값
edit.putString(PREFERENCES_KEY,binding.etHello.text.toString())
edit.apply()
}
}