Hive는 Dart로 작성된 빠르고 가벼운 NoSQL(key-value) 데이터베이스입니다. 그리고 다음과 같은 장점이 있습니다.
- 🚀 의존성이 없기 때문에 크로스 플랫폼(모바일, 데스크탑, 브라우저)에서 사용 가능합니다.
- ⚡ SharedPreferences와 SQLite보다 성능이 뛰어납니다. (벤치마킹 자료)
- ❤️ 사용방법이 간단하고 직관적입니다.
- 🔒 강력한 암호화(encryption)가 내장되어 있습니다.
설치 및 사용방법은 공식 문서에 자세하게 나와있습니다. 문서를 보면서 따라해보겠습니다.
시작하기
프로젝트에 Hive 추가하기
pubspec.yaml 에 다음을 추가합니다.
dependencies:
hive: ^2.0.4
hive_flutter: ^1.0.0
dev_dependencies:
hive_generator: ^1.1.0
build_runner: ^2.0.4
Hive 초기화 하기
main.dart에서 runApp 하기 전에 Hive를 초기화 합니다.
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
Future<void> main() async {
await Hive.initFlutter();
runApp(MyApp());
}
데이터 읽기/쓰기
Hive에는 모든 primitive 타입과 List, Map, DateTime, BigInt,Uint8List를 저장할 수 있습니다. 그리고 TypeAdapters를 사용한 객체(Object)도 저장 할 수 있습니다. TypeAdapters는 아래쪽에서 다시 설명하겠습니다. Hive는 Box에 데이터를 저장합니다. Box name은 Database 이름입니다.
import 'package:hive/hive.dart';
void main() async {
var box = await Hive.openBox('testBox');
box.put('name', 'David');
print('Name: ${box.get('name')}');
}
TypeAdapters 사용하여 Object 저장하기
Adapter 생성하기
person.dart 모델 클래스를 하나 만들어 보겠습니다.
import 'package:hive/hive.dart';
part 'person.g.dart';
@HiveType(typeId : 1)
class Person {
@HiveField(0)
String name;
@HiveField(1)
int age;
Person(this.name, this.age);
}
먼저 hive를 import 합니다. 그리고 person.g.dart를 섹션으로 추가합니다. 참고로 person.g.dart는 hive_generator에 의해 자동으로 생성되는 파일입니다.
클래스에 @HiveType()을 사용하여 모델 클래스를 명확히 합니다. 그러면 Hive은 이 클래스가 TypeAdapter라고 인식하게 됩니다. typeId는 Hive가 올바른 Adapter를 찾는데 사용되는 식별값이며 고유해야 합니다. 0 부터 223 사이의 값만 허용됩니다.
각 필드에는 @HiveField(index)를 사용하여 인덱스 번호를 표시합니다.
이제 터미널에 다음 명령을 입력하여 code generator를 실행합니다. 그러면 필요한 데이터베이스 코드가 자동으로 생성됩니다.
$ flutter packages pub run build_runner build
파일명이 person.dart이면 person.g.dart이 생성됩니다.
Adapter 등록하기
TypeAdapter를 사용하려면 Hive에 등록해야합니다.
main.dart에서 Hive.initFlutter() 바로 아래에 Hive.registerAdapter로 PersonAdapter를 등록합니다.
Future<void> main() async {
await Hive.initFlutter();
Hive.registerAdapter(PersonAdapter()); // add here
runApp(MyApp());
}
Object 저장하기
void main() async {
var box = await Hive.openBox('persons');
box.add('david', Person('David', 32));
print(box.values);
}
Happy Coding~!
출처: https://steemit.com/kr/@anpigon/flutter-typeadapter-hive-database
'App > Flutter' 카테고리의 다른 글
Flutter로 어떤 UI든 구현하는 방법 (0) | 2024.03.21 |
---|---|
Flutter Bloc과 Cubit (0) | 2024.03.21 |
Flutter Operator와 Equatable로 객체 비교하기 (0) | 2024.03.21 |
Flutter ensureInitialized() 언제, 왜 호출해야 하는가? (0) | 2024.03.18 |
Flutter 개발 환경 설정 (vscode) (0) | 2024.03.17 |