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를 고려해보세요!
'Flutter & Dart' 카테고리의 다른 글
| [Flutter] GetX와 ListView로 동적 리스트 관리하기 (0) | 2025.12.01 |
|---|---|
| [Flutter] Getx 와 Hive 같이 사용하는 방법 (0) | 2025.11.20 |
| [Flutter] 플러터 무한 스크롤 구현하기 (0) | 2025.08.26 |
| [Flutter] 파일 뷰어를 만들어보자 [power_file_viewer_v2] (1) | 2025.08.14 |
| [Flutter] Flutter와 Dart에서 유용한 함수 정리 (0) | 2025.07.08 |