Hive 로컬데이터베이스
카테고리: Package
Hive
는 Flutter에서 사용할 수 있는 경량의 NoSQL 데이터베이스입니다. Hive는 빠르고 간단하게 데이터 저장소를 제공하며, 데이터를 키-값 쌍으로 저장할 수 있습니다. 특히, 객체를 직접 저장하고, 암호화 기능도 지원하여 모바일 애플리케이션에서 유용하게 사용될 수 있습니다.
설치
pubspec.yaml
파일에 hive
와 hive_flutter
패키지를 추가합니다:
dependencies:
flutter:
sdk: flutter
hive: ^2.0.5
hive_flutter: ^1.1.0
그런 다음, 패키지를 설치합니다:
flutter pub get
Hive 데이터베이스 사용 예제
다음은 Hive를 사용하여 간단한 Flutter 애플리케이션을 만들고 데이터를 저장하고 조회하는 방법을 설명하는 예제입니다.
1. 데이터베이스 초기화 및 모델 정의
main.dart
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
// 모델 등록
Hive.registerAdapter(UserAdapter());
// Box 열기
await Hive.openBox<User>('userBox');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: UserScreen(),
);
}
}
class UserScreen extends StatefulWidget {
@override
_UserScreenState createState() => _UserScreenState();
}
class _UserScreenState extends State<UserScreen> {
final Box<User> _userBox = Hive.box<User>('userBox');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Hive Example')),
body: Column(
children: [
ElevatedButton(
onPressed: _addUser,
child: Text('Add User'),
),
Expanded(
child: ValueListenableBuilder<Box<User>>(
valueListenable: _userBox.listenable(),
builder: (context, box, _) {
final users = box.values.toList();
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
return ListTile(
title: Text(user.name),
subtitle: Text('Age: ${user.age}'),
);
},
);
},
),
),
],
),
);
}
void _addUser() {
final user = User(name: 'John Doe', age: 30);
_userBox.add(user);
}
}
@HiveType(typeId: 0)
class User extends HiveObject {
@HiveField(0)
final String name;
@HiveField(1)
final int? age;
User({required this.name, this.age});
}
class UserAdapter extends TypeAdapter<User> {
@override
final typeId = 0;
@override
User read(BinaryReader reader) {
final name = reader.readString();
final age = reader.readIntOrNull();
return User(name: name, age: age);
}
@override
void write(BinaryWriter writer, User obj) {
writer.writeString(obj.name);
writer.writeInt(obj.age ?? 0);
}
}
설명
- 초기화 및 모델 등록:
Hive.initFlutter()
를 호출하여 Hive를 초기화합니다.Hive.registerAdapter()
를 사용하여 Hive에 사용자 정의 모델(User
)의 어댑터를 등록합니다.
- 모델 정의:
User
클래스는 Hive 모델을 정의합니다.@HiveType
및@HiveField
어노테이션을 사용하여 이 클래스를 Hive에 적합하게 만듭니다.UserAdapter
는 Hive가User
객체를 읽고 쓸 수 있도록 돕는 어댑터입니다.
- 데이터베이스 작업:
_userBox
를 사용하여userBox
라는 이름의 Hive box를 열고, 사용자를 추가하거나 조회할 수 있습니다.ValueListenableBuilder
를 사용하여 Hive box의 데이터 변경을 감지하고 UI를 업데이트합니다.
- UI 구성:
ElevatedButton
을 클릭하여 새로운 사용자를 추가합니다.ListView
를 사용하여 저장된 사용자 목록을 표시합니다.
이 예제를 통해 Hive를 사용하여 Flutter 애플리케이션에서 데이터를 저장하고 조회하는 기본적인 방법을 익힐 수 있습니다. Hive는 사용하기 간편하며, 빠르고 유연한 데이터베이스 솔루션을 제공합니다.
댓글 남기기