Kotiln android (SharedPreferences)

subak96·2023년 9월 12일

앱들을 보다보면 내가 검색했던 내용이 저장되있는 걸 볼 수 있다. 오늘은 그 부분의 내용을 공부하고 정리하고자한다.

먼저 Preference란 무엇일까?

  • 프로그램의 설정 정보 (사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용
  • XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장.
  • SharedPreferences 클래스
    • Preferences의 데이터(키-값 세트)를 관리하는 클래스
    • 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다.
    • 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.

요약하자면 xml 텍스트 파일에 키-값을 세트로 정보를 영구적으로 저장하는 용도라고 보면된다.

Preference를 사용하려면 다음과 같은 형식으로 사용하면 된다.

val 변수명 = activity?.getSharedPreferences(name, mode) or activity?. getPreferences(Context.MODE_PRIVATE)

이런식으로 액티비티뒤에 getSharedPreferences(name, mode)을 써서 사용해주면 되지만 위 코드 처엄 getSharedPreferences 혹은 getPreferences 둘중 하나를 코드 상황에 맡게 쓰면 되는데 그 이유는 Shared Preference파일을 여러개를 쓰냐, 혹은 한개의 파일로 쓰냐의 차이이다.
자세한 사항은 다음과 같다.

  • getSharedPreferences (name, mode)
    • 여러개의 Shared Preference파일들을 사용하는 경우
    • name : 프레퍼런스 데이터를 저장할 XML 파일의 이름이다.
    • mode : 파일의 공유 모드
      • MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
      • MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated됨

코드로 보자면 다음과 같다

val 변수명 = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)

덧붙혀서 사용 가능한 데이터 타입도 있다.

위 사진을 참고해서 본인의 사용에 맞게 데이터 타입을 고르면 된다.

  • getPreferences
    • 한 개의 Shared Preference
    • Activity 클래스에 정의된 메소드 이므로, Activity 인스턴스를 통해 접근 가능
    • 생성한 액티비티 전용이므로 같은 패키지의 다른 액티비티는 읽을 수 없다.
    • 액티비티와 동일한 이름의 XML 파일 생성

코드로 보면과 같다.

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

여기까지가

SharedPreferences의 기본 구성밑 사용법이다.

간단한 예제를 하나 만들어 좀더 사용법을 익혀보도록하자.

우선 xml부터 작성하여 다음과 같은 화면을 꾸민다.

그리도 코드는 다음과 같이 작성해준다.

코드를 살펴보면

btnSave라는 이름의 버튼 id를 가진 버튼을 눌렀을때 private fun saveData()가 실행되고 val pref = getSharedPreferences("pref",0)에 pref의 이름의 키값과 모델을 0을 넣어준뒤 val edit = pref.edit()를 작성하여 edit라는 변수에 넣어준다.
그리고
edit.putString("name", binding.etHello.text.toString())
edit.apply() 를 입력하여 Edit 텍스트에 글씨를 적고 버튼을 누르게되면 텍스트가 저장이 되고서, 토스트 메시지로 Data Saved를 띄워준다.

그리고 Edit 텍스트에 저장된 텍스트를 불러오기 위해 private fun loadData() 작성, val pref = getSharedPreferences("pref",0) 똑같이 작성한뒤 binding.etHello.setText(pref.getString("name",""))로 저장된 텍스트를 불러와 Edit 텍스트에 띄워준다.

문제 없이 작성되었다면 Edit 텍스트에 텍스트를 적고 버튼을 눌러 저장한뒤 어플을 껏다 켜보면 끄기전에 적어놨던 텍스트가 다시 쓰는걸 확인해 볼 수있다.

1개의 댓글

comment-user-thumbnail
2023년 9월 12일

수박님 SharedPreference 내용 잘 읽고 갑니다 :)

답글 달기