[flutter] 플러터(flutter)에서의 로컬 데이터 저장 방법

Flutter Logo

안녕하세요! 이번에는 플러터(Flutter)에서 로컬 데이터를 저장하는 방법에 대해 알아보겠습니다. 플러터는 모바일 애플리케이션을 개발하기 위한 크로스 플랫폼 프레임워크로, 어플리케이션에서 사용자의 로컬 데이터를 저장하고 관리하는 것이 중요한 역할을 합니다.

1. SharedPreferences를 사용한 데이터 저장

SharedPreferences는 안드로이드 및 iOS에서 사용되는 키-값 쌍의 데이터를 저장하는 가장 간단하고 편리한 방법입니다. 아래의 예시와 같이 SharedPreferences 패키지를 플러터 애플리케이션에 추가해야 합니다.

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.5.12+4

그리고 다음과 같이 SharedPreferences를 사용해 데이터를 저장하고 가져옵니다.

import 'package:shared_preferences/shared_preferences.dart';

// 데이터 저장
void saveData(String key, String value) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString(key, value);
}

// 데이터 가져오기
Future<String> getData(String key) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.getString(key) ?? "";
}

위의 코드에서 데이터를 저장할 때 setString() 메서드를 사용하고, 가져올 때는 getString() 메서드를 사용합니다. SharedPreferences는 키-값 쌍으로 데이터를 저장하며, key 값으로 데이터를 구분하게 됩니다.

2. 파일 시스템을 사용한 데이터 저장

SharedPreferences가 키-값 쌍을 저장하는 데 편리하지만, 복잡한 데이터 구조를 저장하기에는 한계가 있습니다. 이럴 경우 파일 시스템을 사용하여 데이터를 저장할 수 있습니다.

import 'dart:async';
import 'dart:io';

// 데이터 저장
void saveData(String data) {
  final file = File('path_to_file');
  file.writeAsStringSync(data);
}

// 데이터 가져오기
Future<String> getData() async {
  try {
    final file = File('path_to_file');
    return await file.readAsString();
  } catch (e) {
    return "";
  }
}

위의 코드에서 path_to_file은 애플리케이션 내에서 데이터를 저장할 파일의 경로를 나타냅니다. writeAsStringSync() 메서드를 사용하여 데이터를 저장하고, readAsString() 메서드를 사용하여 데이터를 가져옵니다.

3. 데이터베이스를 사용한 데이터 저장

더 복잡한 데이터 구조를 저장하거나 대량의 데이터를 처리해야 하는 경우 데이터베이스를 사용하는 것이 좋습니다. 플러터에서는 SQLite 데이터베이스를 사용할 수 있는 다양한 패키지가 있습니다. 그 중에서 sqflite 패키지를 사용해보겠습니다.

dependencies:
  flutter:
    sdk: flutter
  sqflite: ^2.0.0+4
  path_provider: ^2.0.2
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';

// 데이터베이스 생성 및 열기
Future<Database> initDatabase() async {
  Directory documentsDirectory = await getApplicationDocumentsDirectory();
  String path = join(documentsDirectory.path, "database.db");
  return await openDatabase(path, version: 1,
      onCreate: (Database db, int version) async {
    await db.execute(
        "CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
  });
}

// 데이터 저장
void saveData(String name, int age) async {
  Database db = await initDatabase();
  Map<String, dynamic> data = {"name": name, "age": age};
  db.insert("users", data);
}

// 데이터 가져오기
Future<List<Map<String, dynamic>>> getData() async {
  Database db = await initDatabase();
  return db.query("users");
}

위의 코드에서 initDatabase() 함수를 사용하여 데이터베이스를 생성하고 엽니다. saveData() 함수에서는 데이터베이스에 데이터를 삽입하고, getData() 함수에서는 데이터베이스에서 데이터를 조회합니다.

이렇게 플러터에서 로컬 데이터를 저장하는 세 가지 방법을 알아보았습니다. SharedPreferences를 사용하면 간단하게 키-값 쌍을 저장할 수 있고, 파일 시스템을 사용하여 복잡한 데이터 구조를 저장할 수 있으며, 데이터베이스를 사용하여 대량의 데이터를 효율적으로 관리할 수 있습니다. 프로젝트에 따라 적합한 방법을 선택하여 사용하시기 바랍니다.

이 글이 여러분에게 도움이 되었기를 바랍니다. 더 많은 정보는 공식 플러터(Flutter) 웹사이트를 참고해주세요.