Android/StoreInfo

<강의> 안드로이드 앱 개발 심화 - SharedPreferences

re트 2024. 1. 23. 16:25
728x90

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 파일

반응형