[Android] 데이터 저장 방법(SharedPreference)

안세홍·2024년 9월 2일
post-thumbnail

대부분의 정보는 서버에 저장하지만 클라이언트에서 저장해야 하는 값도 존재합니다.
또한 안드로이드 앱에서 데이터를 저장하는 것은 중요한 과정입니다. 여러 가지 이유가 있지만, 주로 다음과 같은 목적으로 데이터 저장이 필요합니다.

  1. 사용자 경험 향상

사용자의 선호도, 설정, 진행 상황 등을 기억하면 사용자가 매번 같은 정보를 입력하거나 설정을 조정할 필요가 없어집니다. 예를 들어, 음악 앱이 사용자의 플레이리스트를 저장하거나, 쇼핑 앱이 장바구니의 상태를 기억하는 것이 대표적입니다.

  1. 오프라인 접근성

네트워크 연결이 불안정하거나 사용할 수 없는 환경에서도 앱이 제대로 기능하도록 하기 위해서는 필요한 데이터를 로컬에 저장해야 합니다. 이를 통해 사용자는 오프라인 상태에서도 정보를 조회하거나 일부 기능을 사용할 수 있습니다.

  1. 네트워크 트래픽 및 비용 절감

서버나 클라우드에 데이터를 요청하는 횟수를 줄임으로써 네트워크 사용량을 줄이고, 결과적으로 데이터 사용료나 서버 비용을 절감할 수 있습니다. 로컬에 데이터를 캐싱하면 반복적인 데이터 요청을 줄일 수 있습니다.

  1. 개인화 및 맞춤화

사용자의 활동 데이터를 저장하고 분석함으로써 사용자에게 맞춤형 콘텐츠나 광고를 제공할 수 있습니다. 이는 사용자의 만족도를 높이고 앱 사용 빈도를 증가시킬 수 있습니다.

  1. 데이터 보호 및 복구

사용자 데이터를 안전하게 보관하고, 필요한 경우 이전 상태로 복구할 수 있도록 지원합니다. 이는 앱 오류, 기기 문제 또는 데이터 손실 시 사용자 데이터의 안전성을 보장하는 데 중요합니다.

이와 같은 이유로, 데이터를 적절하게 관리하고 저장하는 것은 앱의 기능성, 효율성, 그리고 사용자 경험에 직접적인 영향을 미칩니다.

오늘 블로그에 작성하려는 Android 데이터 저장 방법인 SharedPreferences 의 특징, 장점 및 단점에 대해 살펴보겠습니다.

SharedPreferences

Android 어플리케이션에서 가볍고 간단한 데이터를 저장하기 위한 시스템을 제공합니다. 이 방식은 주로 설정 값이나 간단한 사용자 정보를 저장하는 데 사용됩니다.

특징

  • 키-값 쌍 형태로 데이터 저장 : 간단한 키-값 형식으로 데이터를 저장하고 관리할 수 있습니다.
  • 프로세스 내에서의 빠른 접근 : 데이터는 XML 파일 형태로 내부 저장소에 저장되며, 앱 내에서 빠르게 접근할 수 있습니다.
  • 앱 전용 데이터 저장 : 데이터는 앱 전용 디렉토리에 저장되므로 다른 앱에서는 접근할 수 없습니다.
  • Application 이 삭제되기 전까지 저장한 데이터가 보존됩니다.

장점

  • 간편한 사용 : 사용 방법이 간단하며, 몇 줄의 코드만으로 데이터를 저장하고 불러올 수 있습니다.
  • 경량 및 빠른 접근성 : 작은 데이터를 빠르게 저장하고 불러올 수 있어, 사용자 설정이나 상태 정보를 관리하기에 적합합니다.
  • 높은 호환성 : 모든 Android 버전에서 널리 지원되며, 기기 호환성 문제가 거의 없습니다.

단점

  • 한정된 데이터 유형 지원 : 복잡한 데이터 유형이나 구조를 지원하지 않고, 주로 기본 데이터 타입만 저장 가능합니다.
  • 암호화 부재 : 기본적으로 암호화되지 않아 보안에 취약할 수 있으며, 루팅된 기기에서는 저장된 데이터에 쉽게 접근할 수 있습니다.
  • 대용량 데이터에는 부적합 : 큰 데이터 세트나 빈번하게 업데이트 되는 데이터를 저장하기에는 성능 이슈가 발생할 수 있습니다.

데이터 저장하기

  1. SharedPreferences 인스턴스 얻기 : SharedPreferences 인스턴스를 얻기 위해 getSharedPreferences 메서드를 사용합니다. 이 메서드는 파일 이름과 모드(일반적으로 Context.MODE_PRIVATE)를 인자로 받습니다.
  2. Editor 얻기 : SharedPreferences.Editor 인스턴스를 통해 데이터를 저장합니다.
  3. 데이터 저장 : put 메서드를 사용하여 키-값 쌍으로 데이터를 저장합니다. 데이터 타입에 따라 putString, putInt, putBoolean 등의 메서드가 있습니다.
  4. 변경 사항 적용 : apply() 또는 commit() 메서드를 호출하여 변경 사항을 저장합니다. apply()는 비동기적으로 데이터를 저장하고, commit()은 동기적으로 데이터를 저장합니다.
val sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
editor.putString("key1", "value1")
editor.putInt("key2", 123)
editor.apply()  // 비동기적 저장

데이터 불러오기

  1. SharedPreferences 인스턴스 얻기 : 저장할 때와 같은 파일 이름과 모드로 인스턴스를 얻습니다.
  2. 데이터 조회 : get 메서드를 사용하여 저장된 데이터를 조회합니다. 데이터 타입에 맞는 getString, getInt, getBoolean 등의 메서드를 사용하며, 해당 키에 대한 데이터가 없는 경우를 대비해 기본값도 설정할 수 있습니다.
val sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
val value1 = sharedPreferences.getString("key1", "defaultString")
val value2 = sharedPreferences.getInt("key2", 0)
profile
나만의 개발 일기

0개의 댓글