Hive 로컬데이터베이스

Date:     Updated:

카테고리:

태그:

Hive는 Flutter에서 사용할 수 있는 경량의 NoSQL 데이터베이스입니다. Hive는 빠르고 간단하게 데이터 저장소를 제공하며, 데이터를 키-값 쌍으로 저장할 수 있습니다. 특히, 객체를 직접 저장하고, 암호화 기능도 지원하여 모바일 애플리케이션에서 유용하게 사용될 수 있습니다.

설치

pubspec.yaml 파일에 hivehive_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);
  }
}

설명

  1. 초기화 및 모델 등록:
    • Hive.initFlutter()를 호출하여 Hive를 초기화합니다.
    • Hive.registerAdapter()를 사용하여 Hive에 사용자 정의 모델(User)의 어댑터를 등록합니다.
  2. 모델 정의:
    • User 클래스는 Hive 모델을 정의합니다. @HiveType@HiveField 어노테이션을 사용하여 이 클래스를 Hive에 적합하게 만듭니다.
    • UserAdapter는 Hive가 User 객체를 읽고 쓸 수 있도록 돕는 어댑터입니다.
  3. 데이터베이스 작업:
    • _userBox를 사용하여 userBox라는 이름의 Hive box를 열고, 사용자를 추가하거나 조회할 수 있습니다.
    • ValueListenableBuilder를 사용하여 Hive box의 데이터 변경을 감지하고 UI를 업데이트합니다.
  4. UI 구성:
    • ElevatedButton을 클릭하여 새로운 사용자를 추가합니다.
    • ListView를 사용하여 저장된 사용자 목록을 표시합니다.

이 예제를 통해 Hive를 사용하여 Flutter 애플리케이션에서 데이터를 저장하고 조회하는 기본적인 방법을 익힐 수 있습니다. Hive는 사용하기 간편하며, 빠르고 유연한 데이터베이스 솔루션을 제공합니다.

Package 카테고리 내 다른 글 보러가기

댓글 남기기