shared_preferences

Odyssey·2024년 11월 8일

flutter_study

목록 보기
9/9
post-thumbnail

pub.dev의 shared_preferences 공식문서

shared_preferences 패키지는 Flutter 애플리케이션에서 간단한 데이터를 로컬에 영구적으로 저장할 수 있게 해주는 경량 패키지이다. 이 패키지는 Android와 iOS의 로컬 스토리지 API(SharedPreferencesNSUserDefaults)를 추상화하여 Flutter 앱에서도 데이터가 영구적으로 유지될 수 있도록 지원한다. 특히 설정 값, 사용자 정보, 로그인 상태와 같은 간단한 키-값 쌍의 데이터를 저장하고 불러오는 데 유용하다.

주요 특징 및 장점

  1. 키-값 쌍(Key-Value Pair) 저장
    shared_preferences 패키지는 데이터를 키-값 쌍의 형태로 저장할 수 있다. 데이터는 String, int, double, bool, List<String>와 같은 타입으로 제한되며, 간단한 데이터만 저장할 수 있다.

  2. 영구 저장
    앱을 닫거나 기기를 재시작해도 데이터를 유지할 수 있다. 이는 로그인 상태, 사용자 설정, 언어 선택과 같은 앱 기본 설정을 유지하는 데 유용하다.

  3. 비동기 API
    shared_preferences 패키지는 비동기적으로 데이터를 읽고 쓰는 API를 제공한다. 따라서 await와 함께 사용하여 비동기 처리를 효과적으로 관리할 수 있다.

  4. 플랫폼 독립성
    Android와 iOS를 포함하여, 웹 및 데스크탑 지원도 실험적으로 제공하여 코드 변경 없이 여러 플랫폼에서 데이터를 쉽게 관리할 수 있다.

설치 방법

  1. 패키지 추가
    pubspec.yaml 파일에 shared_preferences 패키지를 추가한다.

    dependencies:
      shared_preferences: ^2.3.2  # 최신 버전을 확인 후 사용
  2. 패키지 설치
    flutter pub get 명령어를 실행하여 패키지를 다운로드한다.

사용법

1. SharedPreferences 객체 가져오기

SharedPreferences 객체는 데이터를 읽고 쓰기 위해 필수적이며, 비동기로 인스턴스를 가져와야 한다.

import 'package:shared_preferences/shared_preferences.dart';

Future<void> initializePreferences() async {
  final prefs = await SharedPreferences.getInstance();
}

2. 데이터 저장하기

SharedPreferences 인스턴스를 사용해 데이터를 저장할 수 있다. setString, setInt, setBool, setDouble, setStringList 등의 메서드로 다양한 데이터 타입을 저장할 수 있다.

Future<void> saveUserData() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('username', 'JohnDoe'); // 문자열 저장
  await prefs.setInt('age', 25); // 정수형 저장
  await prefs.setBool('isLoggedIn', true); // Boolean 저장
  await prefs.setDouble('height', 1.75); // 실수형 저장
  await prefs.setStringList('preferences', ['music', 'movies']); // 리스트 저장
}

3. 데이터 불러오기

저장된 데이터를 읽어올 때는 getString, getInt, getBool, getDouble, getStringList 메서드를 사용한다. 키가 존재하지 않으면 기본값을 설정할 수도 있다.

Future<void> loadUserData() async {
  final prefs = await SharedPreferences.getInstance();
  String username = prefs.getString('username') ?? 'Guest';
  int age = prefs.getInt('age') ?? 0;
  bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
  double height = prefs.getDouble('height') ?? 0.0;
  List<String> preferences = prefs.getStringList('preferences') ?? [];
}

4. 데이터 삭제하기

특정 키의 데이터를 삭제하거나 모든 데이터를 삭제할 수 있다.

  • 특정 키 삭제: remove 메서드를 사용하여 특정 데이터를 삭제한다.
  • 모든 데이터 삭제: clear 메서드를 사용해 모든 키-값 쌍을 삭제한다.
Future<void> deleteUserData() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.remove('username'); // 특정 데이터 삭제
  await prefs.clear(); // 모든 데이터 삭제
}

주의사항

  • 데이터 크기 제한: shared_preferences는 작은 크기의 데이터를 저장하는 데 적합하며, 대용량 데이터에는 적합하지 않다. 데이터베이스가 필요한 경우에는 sqflite 같은 데이터베이스 패키지를 사용하는 것이 좋다.
  • 비동기 사용: getInstance()는 비동기 메서드이므로, 항상 await와 함께 사용해야 한다. 그렇지 않으면 SharedPreferences 객체가 준비되지 않아 null이 반환될 수 있다.
  • 플랫폼별 차이: Android와 iOS에서는 로컬에 XML이나 기본 설정 파일로 저장되지만, 웹에서는 브라우저의 로컬 저장소(LocalStorage)에 저장된다.

사용 예시

다음은 사용자가 앱에서 로그인을 유지할 수 있도록 로그인 상태를 저장하고 불러오는 간단한 예제이다.

import 'package:shared_preferences/shared_preferences.dart';

class AuthService {
  Future<void> setLoginStatus(bool isLoggedIn) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isLoggedIn', isLoggedIn);
  }

  Future<bool> getLoginStatus() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getBool('isLoggedIn') ?? false;
  }
}

이 예제에서는 setLoginStatus 메서드로 로그인 상태를 저장하고, getLoginStatus 메서드로 로그인 상태를 불러와 애플리케이션이 열릴 때마다 사용자의 로그인 여부를 확인할 수 있다.

요약

shared_preferences는 Flutter 애플리케이션에서 간단한 데이터(설정 값, 사용자 정보 등)를 영구적으로 저장하는 데 유용한 패키지이다. Android, iOS, 웹, 데스크탑 환경에서 동일한 API로 사용할 수 있으며, 비동기적으로 데이터를 저장하고 불러오는 작업을 쉽게 할 수 있다. 간단한 데이터 저장에 적합하지만 대용량 데이터에는 적합하지 않으며, 필요한 경우 데이터베이스를 사용하는 것이 좋다.

0개의 댓글