1. SharedPreferences란?
- 앱에서 데이터를 저장하는 방법 중 하나
- 간단한 데이터(설정 선택 정보)를 저장할 때 주로 사용
- XML 포맷의 텍스트 파일에 key-value 쌍으로 데이터를 저장
- 액티비티 간 공유하며, 한쪽에서 수정해도 다른쪽에서 수정된 데이터를 읽을 수 있음
- 저장된 데이터는 앱이 삭제되기 전까지 유지
- 외부에서는 읽을 수 없음
2. 공유 환경설정의 핸들 가져오기
1) getSharedPreferences(name, mode)
- 이름으로 식별되는 여러개의 공유 환경설정 파일들이 필요한 경우 사용
- 애플리케이션의 모든 Context에서 호출 가능
- name : 데이터를 저장할 XML 파일의 이름
- mode : 파일의 공유 모드
> MODE_PRIVATE : 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기/쓰기가 가능
> MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE : 보안 상의 이유로 API level 17에서 deprecated
(API level 24부터 사용시 SecurityException 발생)
- 사용가능한 데이터 타입
> Boolean
> Float
> Int
> Long
> String
> StringSet
2) getPreferences(mode)
- 한개의 공유 환경설정 파일만 필요한 경우 사용
- Activity 클래스에 정의된 메소드이기 때문에, Activity 인스턴스를 통해 접근 가능
- 생성한 액티비티 전용이므로 같은 패키지의 다른 액티비티는 저장된 데이터를 읽을 수 없음
- 액티비티의 이름과 동일한 XML 파일 생성
- mode : 파일의 공유 모드
> MODE_PRIVATE : 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기/쓰기가 가능
> MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE : 보안 상의 이유로 API level 17에서 deprecated
- 사용가능한 데이터 타입
> Boolean
> Float
> Int
> Long
> String
> StringSet
3. 데이터 저장하기
- 데이터를 저장하기 위해서 Editor 인터페이스를 사용한다.
- 데이터를 저장하고 마지막에 apply() 메서드를 호출해야지 실제 파일에 적용된다.
- Editor의 메소드에는 remove(key: String), clear(), apply(), commit()이 있다.
> remove(key: String) : 해당 키의 데이터를 삭제 / 해당 메소드 후에 apply() 메소드를 호출해줘야함
> clear() : 모든 데이터 삭제 / 해당 메소드 후에 apply() 메소드를 호출해줘야함
> apply() : 변경한 업데이트를 실제 파일에 비동기적으로 저장
> commit() : 변경한 업데이트를 실제 파일에 동기적으로 저장 / 동기적이므로 UI 스레드에서 호출하는 것은 피해야함
private fun saveData() {
val pref = getSharedPreferences("pref", MODE_PRIVATE) // SharedPreferences의 핸들 가져오기
val edit = pref.edit() // 수정 모드
edit.putString("name", binding.etHello.text.toString()) // 1번째 인자는 키, 2번째 인자는 저장할 데이터
edit.apply() // 저장완료
}
4. 데이터 불러오기
- 따로 Editor 인터페이스를 사용하지 않고 SharedPreferences 내 메서드를 호출하여 불러온다.
- 해당키에 데이터가 없으면 디폴트 데이터를 반환한다.
private fun loadData() {
val pref = getSharedPreferences("pref",0) // SharedPreference 핸들 가져오기
binding.etHello.setText(pref.getString("name","")) // 1번째 인자는 키, 2번째 인자는 디폴트 데이터
}
5. 데이터 저장 확인
- Device Explorer -> data -> data -> 패키지명 -> shared_prefs -> 설정한 XML 파일
'Android > StoreInfo' 카테고리의 다른 글
<강의> 안드로이드 앱 개발 심화 - 사용자 위치 얻기 (1) | 2024.01.24 |
---|---|
<강의> 안드로이드 앱 개발 심화 - Room (1) | 2024.01.23 |
<정리> 챌린지반 과제2 - 2 (0) | 2024.01.23 |
<정리> 챌린지반 과제2 - 1 (0) | 2024.01.23 |
Facade Pattern에 대한 이해 (0) | 2024.01.22 |