본문 바로가기

Flutter & Dart

[Flutter] Flutter에서 Hive 사용법

반응형

Hive란?

Hive는 Flutter에서 빠르고 효율적인 로컬 데이터 저장을 위한 NoSQL 데이터베이스입니다. 이 데이터베이스는 빠른 읽기/쓰기를 제공하며, 작은 규모의 앱에서 성능이 뛰어납니다. 또한, 다양한 데이터 타입을 지원하고, 객체 지향적인 데이터 구조를 활용할 수 있기 때문에 앱 개발에서 매우 유용합니다.

1. Hive 패키지 설치

Hive를 사용하려면 먼저 pubspec.yaml 파일에 Hive 패키지를 추가해야 합니다. 또한, hive_flutter라는 패키지도 추가해주어야 Flutter 환경에서 Hive를 사용할 수 있습니다.

 
dependencies:
  flutter:
    sdk: flutter
  hive: ^2.0.0
  hive_flutter: ^1.1.0

그 후 pub get 명령어를 실행하여 패키지를 설치합니다.

 

2. Hive 초기화

Hive를 사용하기 전에 반드시 앱의 시작 부분에서 Hive를 초기화해야 합니다. 보통 main.dart 파일의 main() 함수 안에서 초기화를 수행합니다.

import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';

void main() async {
  await Hive.initFlutter();  // Hive 초기화
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

3. Box 열기

Hive는 데이터를 "Box"에 저장합니다. Box는 데이터를 저장하는 공간으로, 하나의 Box에 여러 데이터를 저장할 수 있습니다. Box는 앱 내에서 한 번만 열면 됩니다.

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  late Box box;

  @override
  void initState() {
    super.initState();
    openBox();
  }

  // Box 열기
  void openBox() async {
    box = await Hive.openBox('myBox');  // 'myBox'라는 이름의 Box 열기
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Hive 예제')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 데이터를 저장하는 예시
            box.put('name', '홍길동');
          },
          child: Text('데이터 저장'),
        ),
      ),
    );
  }
}

4. 데이터 저장과 조회

Hive에서는 데이터를 저장할 때 put() 메서드를 사용하고, 데이터를 조회할 때 get() 메서드를 사용합니다.

데이터 저장

box.put('name', '홍길동');

데이터 조회

String? name = box.get('name');
print(name);  // 출력: 홍길동

5. 데이터 삭제

Hive에서 데이터를 삭제할 때는 delete() 메서드를 사용합니다.

box.delete('name');

6. 객체 저장하기 (Custom Objects)

Hive에서는 단순한 데이터뿐만 아니라 객체도 저장할 수 있습니다. 객체를 저장하려면 객체 클래스에 HiveType과 HiveField 어노테이션을 사용하여 클래스를 등록해야 합니다.

객체 클래스 정의

import 'package:hive/hive.dart';

part 'user.g.dart';  // 자동으로 생성된 코드가 이 파일에 위치합니다.

@HiveType(typeId: 0)
class User {
  @HiveField(0)
  final String name;

  @HiveField(1)
  final int age;

  User({required this.name, required this.age});
}

Hive Adapter 생성

hive_generator와 build_runner 패키지를 사용하여 객체에 대한 Adapter를 생성할 수 있습니다. 이를 통해 객체를 Hive에 저장할 수 있습니다.

 

flutter pub run build_runner build

 

객체 저장과 조회

 
void saveUser() async {
  var box = await Hive.openBox('userBox');
  var user = User(name: '홍길동', age: 30);
  await box.put('user', user);
}

void getUser() async {
  var box = await Hive.openBox('userBox');
  var user = box.get('user') as User;
  print(user.name);  // 출력: 홍길동
  print(user.age);   // 출력: 30
}

7. Hive 데이터베이스 클로징

앱 종료 시, Hive의 데이터를 안전하게 종료하려면 Hive.close() 메서드를 호출해야 합니다. 이를 보통 main.dart 파일에서 앱 종료 전 처리합니다.

 

@override
void dispose() {
  Hive.close();
  super.dispose();
}

 

8. Hive 사용 팁

  • 타입 안전성: Hive는 객체를 저장할 때 타입을 강제로 지정해줘야 하므로, 타입에 대한 안전성을 보장할 수 있습니다.
  • 리스트와 맵 저장: Hive는 List나 Map 같은 자료구조도 저장할 수 있습니다.
  • 데이터 암호화: Hive에서는 데이터를 암호화할 수 있는 기능도 제공하므로, 보안이 중요한 앱에서 유용합니다.

결론

Hive는 Flutter에서 로컬 데이터베이스를 관리하는 데 매우 유용한 도구입니다. 빠른 속도와 간편한 API를 제공하여, 앱에서 데이터를 저장하고 조회하는 작업을 쉽게 처리할 수 있습니다. 위에서 소개한 기본 사용법을 토대로 더욱 복잡한 데이터 저장 및 조회 기능을 구현할 수 있습니다. Flutter 앱을 만들 때, 데이터베이스 솔루션으로 Hive를 고려해보세요!

반응형