[개발][Flutter] TypeAdapter로 Hive DataBase 사용하기

in #kr3 years ago (edited)

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.registerAdapterPersonAdapter를 등록합니다.

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~!

Sort:  

[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

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63643.10
ETH 2582.85
USDT 1.00
SBD 2.75