[개발][Flutter] TypeAdapter로 Hive DataBase 사용하기
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~!
[US$49.00](▼14%)[Nespresso]스타벅스 네스프레소 호환 캡슐 7종 / 120 캡슐 골라담기 / 20개씩 총 6종류 교차 선택 가능 / 중복 선택 가능 / 재고 확보 / 무료배송 / 개당 약 486원 최저가★
WWW.QOO10.COM[US$48.50](▼31%)[illy]★큐텐 최저가!!★일리 100캡슐/야콥스 100캡슐/돌체구스토 108캡슐/스타벅스 120캡슐 네스프레소 호환 캡슐★무료배송★
WWW.QOO10.COM@wonsama님이 당신을 멘션하였습니다.
https://www.steemit.com/@wonsama/flutter-ui
@ayogom님이 당신을 멘션하였습니다.
https://www.steemit.com/@ayogom/sct-zzan-aaa