안드로이드 앱에서의 데이터는 기본적으로 휘발성을 지니고 있기때문에 따로 저장을 하지 않을 경우
앱을 종료하고 다시 실행하면 입력했던 모든 데이터가 사라지게 된다
데이터를 저장하는 방법은 크게 3가지로 나뉘어 진다.
- Shared Preferences
- Database
- 파일로 저장
preference
는 프로그램의 설정정보를 영구적으로 저장하기 위해 사용되는 요소이다.
(사용자의 옵션 선택사항이나, 프로그램 구성정보를 저장한다.)
preference
는 XML포멧의 텍스트 파일로 Key-Value
의 세트로 저장된다.
Preference
의 데이터를 관리하는 클래스로 응용프로그램의 고유한 정보이다.
(따라서 외부에서는 읽을 수 없다.)
프로그램 내무의 액티비티간에 공유되며, 따라서 한쪽 액티비티에서 수정시 다른 액티비티에서도 값을 읽을 수 있다.
Preferences
는 두가지 방법으로 저장이 가능하다.
getPreferences
한개의 Shared Preference
파일을 사용하는 경우 사용한다. Activity
클래스에 정의된 메소드이기 때문에 Activity
인스턴스를 통해 접근이 가능하다.
Activity
전용이기 때문에 같은 패키지여도 다른 Activity
에서 읽는게 불가능하다.
한개의 Shared Preference
파일만 사용하는 경우는 잘 없기떄문에 많이 사용되지 않는다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
getSharedPreferences (name, mode)
여러개의 SharedPreferences
파일들을 사용할때 사용하는 메서드이다.
name
에 Preference
데이터를 저장할 XML파일을 입력하고 mode
에는 파일 공유모드를 입력한다.
파일 공유모드로는 MODE_PRIVATE
, MODE_WORLD_READABLE
, MODE_WORLD_WRITEABLE
세가지가 있었지만 보안상의 이유로 API level 17부터는 MODE_PRIVATE
만 사용이 가능하다.
Boolean
,Float
,Int
,Long
,String
,StringSet
데이터만 사용 가능
// getSharedPreferences로 불러오면서 키값과 모드 (0은 MODE_PRIVATE) 입력
val sharedPref = getSharedPreferences("키 값", 0)
// putString으로 저장될 키와 값을 입력
sharedPref.edit().putString("name", binding.etMain.text.toString())
sharedPref.edit().apply
지정했던 키값으로 Shared Preferences
를 불러와 내부에 저장된 Preferences
의 키캆으로 값을 불러온다.
값을 불러올때는 비어있을 경우에 들어갈 디폴트값이 반드시 함께 입력되어야한다.
// "pref"로 저장된 SharedPreferences를 불러옴
var sharedPref = getSharedPreferences("pref", 0)
// 해당 SharedPreferences에 name으로 저장된 값을 불러옴 뒤쪽에는 디폴트 값이 들어간다.
binding.etMain.setText(sharedPref.getString("name", ""))
심화주차.... 산...넘어...산이네...?