Flutter 학습: 데이터베이스 및 로컬 저장소
Flutter 애플리케이션에서는 다양한 방법으로 데이터를 저장하고 관리할 수 있습니다. 이번 글에서는 로컬 저장소로 SharedPreferences를 사용하는 방법, SQLite 데이터베이스를 사용하는 방법, 그리고 Hive를 사용한 NoSQL 데이터베이스에 대해 알아보겠습니다.
1. 로컬 저장소: SharedPreferences 사용법
SharedPreferences는 간단한 키-값 쌍 데이터를 로컬에 저장하는 데 사용됩니다. 주로 사용자 설정이나 작은 데이터를 저장할 때 유용합니다.
SharedPreferences 설치: 먼저, pubspec.yaml 파일에 shared_preferences 패키지를 추가합니다.
flutter:
sdk: flutter
shared_preferences: ^2.0.6
그리고 패키지를 설치합니다.
SharedPreferences 사용 예제: SharedPreferences를 사용하여 데이터를 저장하고 불러오는 간단한 예제를 작성해보겠습니다.
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SharedPreferencesExample(),
);
}
}
class SharedPreferencesExample extends StatefulWidget {
@override
_SharedPreferencesExampleState createState() => _SharedPreferencesExampleState();
}
class _SharedPreferencesExampleState extends State<SharedPreferencesExample> {
late SharedPreferences _prefs;
int _counter = 0;
@override
void initState() {
super.initState();
_loadCounter();
}
_loadCounter() async {
_prefs = await SharedPreferences.getInstance();
setState(() {
_counter = _prefs.getInt('counter') ?? 0;
});
}
_incrementCounter() async {
setState(() {
_counter++;
});
await _prefs.setInt('counter', _counter);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SharedPreferences Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Counter: $_counter'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Increment Counter'),
),
],
),
),
);
}
}
위의 예제에서 SharedPreferences를 사용하여 counter 값을 로컬에 저장하고, 애플리케이션을 다시 실행할 때 값을 불러옵니다.
2. SQLite: sqflite 패키지를 사용한 SQLite 데이터베이스
SQLite는 로컬 데이터베이스를 관리할 수 있는 경량의 관계형 데이터베이스입니다. Flutter에서는 sqflite 패키지를 사용하여 SQLite 데이터베이스를 쉽게 사용할 수 있습니다.
sqflite 설치: 먼저, pubspec.yaml 파일에 sqflite와 path 패키지를 추가합니다.
flutter:
sdk: flutter
sqflite: ^2.0.0+3
path: ^1.8.0
그리고 패키지를 설치합니다.
SQLite 사용 예제: SQLite 데이터베이스를 사용하여 데이터를 저장하고 불러오는 간단한 예제를 작성해보겠습니다.
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SqfliteExample(),
);
}
}
class SqfliteExample extends StatefulWidget {
@override
_SqfliteExampleState createState() => _SqfliteExampleState();
}
class _SqfliteExampleState extends State<SqfliteExample> {
late Database _database;
List<Map<String, dynamic>> _notes = [];
@override
void initState() {
super.initState();
_initDatabase();
}
_initDatabase() async {
_database = await openDatabase(
join(await getDatabasesPath(), 'notes.db'),
onCreate: (db, version) {
return db.execute(
'CREATE TABLE notes(id INTEGER PRIMARY KEY, title TEXT)',
);
},
version: 1,
);
_loadNotes();
}
_loadNotes() async {
final List<Map<String, dynamic>> notes = await _database.query('notes');
setState(() {
_notes = notes;
});
}
_addNote() async {
await _database.insert(
'notes',
{'title': 'New Note'},
conflictAlgorithm: ConflictAlgorithm.replace,
);
_loadNotes();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SQLite Example'),
),
body: ListView.builder(
itemCount: _notes.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_notes[index]['title']),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: _addNote,
child: Icon(Icons.add),
),
);
}
}
위의 예제에서 sqflite 패키지를 사용하여 notes 테이블을 생성하고, 새로운 노트를 추가하고 불러옵니다.
3. Hive: NoSQL 데이터베이스 사용법
Hive는 빠르고 경량의 키-값 저장소로, Flutter 애플리케이션에서 NoSQL 데이터베이스를 쉽게 사용할 수 있습니다.
Hive 설치: 먼저, pubspec.yaml 파일에 hive와 hive_flutter 패키지를 추가합니다.
flutter:
sdk: flutter
hive: ^2.0.4
hive_flutter: ^1.1.0
그리고 패키지를 설치합니다.
Hive 초기화: Hive를 사용하기 위해서는 초기화 과정이 필요합니다. 이를 위해 main.dart 파일을 수정합니다.
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
await Hive.initFlutter();
await Hive.openBox('myBox');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HiveExample(),
);
}
}
class HiveExample extends StatefulWidget {
@override
_HiveExampleState createState() => _HiveExampleState();
}
class _HiveExampleState extends State<HiveExample> {
final _myBox = Hive.box('myBox');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hive Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Value: ${_myBox.get('counter', defaultValue: 0)}'),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
setState(() {
_myBox.put('counter', _myBox.get('counter', defaultValue: 0) + 1);
});
},
child: Text('Increment Counter'),
),
],
),
),
);
}
}
위의 예제에서 Hive를 초기화하고, myBox라는 저장소를 열어 데이터를 저장하고 불러옵니다.
이 글에서는 Flutter 애플리케이션에서 데이터를 저장하고 관리하는 다양한 방법에 대해 알아보았습니다. SharedPreferences를 사용하여 간단한 로컬 저장소를 관리하고, sqflite를 사용하여 SQLite 데이터베이스를 관리하며, Hive를 사용하여 NoSQL 데이터베이스를 관리할 수 있습니다. 이러한 기술을 활용하여 강력하고 효율적인 데이터 관리를 구현해보세요. Happy Coding!
'프로그래밍 > Flutter' 카테고리의 다른 글
[Flutter] 10. Flutter의 "테스트 및 디버깅" (0) | 2024.06.26 |
---|---|
[Flutter] 9. Flutter의 "애니메이션 및 그래픽" (0) | 2024.06.26 |
[Flutter] 7. Flutter의 "내비게이션 및 라우팅" (0) | 2024.06.26 |
[Flutter] 6. Flutter의 "네트워킹 및 데이터 처리" (0) | 2024.06.26 |
[Flutter] 5. Flutter의 "상태 관리" (0) | 2024.06.25 |