일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- extention
- flutter
- vscdoe
- GIT
- annotation
- git설치
- 소스제공
- Anaconda
- google search console
- 워드파일
- 미색인
- dynamic color
- python
- widgetsBindingObserver
- Device
- Flask
- uni_links
- Share
- Jupyter Notebook
- inheritedWidget
- 개역개정
- handlebars.js
- 성경필사
- zani
- cache
- ipykernel
- velocity_x
- 생명주기
- dart
- receive_sharing_intent
- Today
- Total
자니노트
Flutter Hive 설명 및 사용방법 - App에서 Data 저장할 수 있는 기능 본문
Hive는 Flutter에서 사용할 수 있는 경량, 빠르고, 키-값 기반의 NoSQL 저장소입니다.
Hive의 주요 특징과 장점은 다음과 같습니다:
속도:
Hive는 빠른 읽기 및 쓰기 성능을 제공합니다. 이는 Hive가 pure Dart로 작성되어 있기 때문에 가능하며, SQLite와 비교하여 일부 작업에서 더 빠르게 동작합니다.
플랫폼 독립성:
Hive는 Dart에서 동작하므로 Flutter 앱의 iOS, Android, Web 및 Desktop 버전에서 모두 사용할 수 있습니다.
타입 어댑터:
Hive는 커스텀 객체를 저장하기 위한 타입 어댑터를 지원합니다. 이를 통해 개발자는 복잡한 데이터 구조도 간단하게 저장하고 검색할 수 있습니다.
데이터 암호화:
Hive는 데이터의 보안을 위해 암호화를 내장 지원하고 있습니다.
서드파티 플러그인 지원:
Hive는 여러 추가 기능을 위한 플러그인과 확장 기능을 지원합니다.
Hive를 사용하는 방법은 꽤 간단합니다. 아래는 Hive를 Flutter에서 사용하는 간략한 예시입니다:
의존성 추가:
dependencies:
hive: ^latest_version
hive_flutter: ^latest_version
Hive 초기화 및 박스 열기:
void main() async {
await Hive.initFlutter();
var box = await Hive.openBox('myBox');
runApp(MyApp());
}
데이터 쓰기 및 읽기:
var box = Hive.box('myBox');
// 쓰기
box.put('name', 'John');
// 읽기
String? name = box.get('name');
커스텀 객체를 사용할 경우 Hive 어댑터를 생성하고 등록해야 합니다.
위 예시는 Hive의 기본적인 사용 방법을 보여줍니다.
Hive는 더 많은 고급 기능과 커스텀 어댑터, 서드파티 플러그인과 같은 다양한 추가 기능을 제공하므로, 공식 문서와 저장소를 참고하여 Hive의 전체 기능 범위를 이해하는 것이 좋습니다.
아래는 추가적으로 객체를 저장할 수 있는 방법입니다.
먼저, 저장하려는 모델을 정의해야 합니다.
class Person {
final String name;
final int age;
Person(this.name, this.age);
}
이 모델에 대한 Hive 어댑터를 생성합니다.
어댑터는 Hive가 커스텀 객체를 바이트로 직렬화하고 바이트에서 역직렬화하는 방법을 알려주는 역할을 합니다. hive_generator 패키지와 build_runner를 사용하여 이 어댑터를 자동으로 생성할 수 있습니다.
먼저, pubspec.yaml에 의존성을 추가합니다:
dependencies:
hive: ^latest_version
hive_flutter: ^latest_version
dev_dependencies:
hive_generator: ^latest_version
build_runner: ^latest_version
그 다음, 모델에 애노테이션을 추가하여 Hive가 해당 클래스를 사용할 수 있도록 합니다:
import 'package:hive/hive.dart';
part 'person.g.dart'; // hive_generator는 이 파일을 생성합니다.
@HiveType(typeId: 0)
class Person {
@HiveField(0)
final String name;
@HiveField(1)
final int age;
Person(this.name, this.age);
}
이제 터미널에서 build_runner를 실행하여 어댑터를 생성합니다:
flutter packages pub run build_runner build
Hive를 초기화하고 어댑터를 등록합니다.
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(PersonAdapter());
runApp(MyApp());
}
이제 Person 객체를 Hive 박스에 저장하고 읽을 수 있습니다.
final box = await Hive.openBox<Person>('personBox');
// 객체 저장
final person = Person("John", 28);
box.add(person);
// 객체 읽기
final firstPerson = box.getAt(0);
위 예제는 Hive를 사용하여 Flutter에서 커스텀 객체를 저장하고 읽는 방법을 보여줍니다.
Hive는 매우 유연하고 확장 가능하기 때문에, 필요에 따라 이러한 기본 동작을 확장하고 조정할 수 있습니다.
꼭 generator와 build_runner를 사용해야만 Hive에서 객체를 저장하는 것은 아닙니다.
그러나 자동으로 Hive 어댑터 코드를 생성해주는 기능은 개발 속도를 크게 향상시키고 코드의 실수를 줄여주는 이점이 있습니다.
hive_generator와 build_runner 없이 수동으로 Hive 어댑터를 작성할 수 있습니다.
예를 들어, 위에서 사용한 Person 클래스의 어댑터를 수동으로 작성한다면 아래와 같습니다:
import 'package:hive/hive.dart';
import 'person.dart';
class PersonAdapter extends TypeAdapter<Person> {
@override
final int typeId = 0; // 이 ID는 각 어댑터 유형마다 고유해야 합니다.
@override
Person read(BinaryReader reader) {
final name = reader.readString();
final age = reader.readInt();
return Person(name, age);
}
@override
void write(BinaryWriter writer, Person obj) {
writer.writeString(obj.name);
writer.writeInt(obj.age);
}
}
이 어댑터를 수동으로 작성한 후, Hive를 초기화하고 어댑터를 등록하면 됩니다:
void main() async {
await Hive.initFlutter();
Hive.registerAdapter(PersonAdapter());
runApp(MyApp());
}
수동으로 어댑터를 작성하면 더 많은 제어와 유연성을 얻을 수 있습니다.
그러나, 모델이 변경될 때마다 해당 변경사항을 반영하여 어댑터 코드도 수동으로 업데이트해야 합니다.
이 점을 고려하여 프로젝트의 필요에 따라 적절한 방법을 선택해야 합니다.
'모바일 개발 > Dart&Flutter' 카테고리의 다른 글
[Flutter] 앱에 공유된 DATA 정보 받기 - uni_links, receive_sharing_intent (0) | 2023.09.12 |
---|---|
Dart extension 설명 및 사용법 - 클래스에 새로운 기능을 추가 (0) | 2023.08.23 |
flutter WidgetsBindingObserver 설명 및 사용법 - 앱 생명주기 이벤트 처리 (0) | 2023.08.22 |
Flutter velocity_x 설명 및 사용법 (0) | 2023.08.22 |
Flutter InheritedWidget 라이브러리 설명 및 사용 방법 (0) | 2023.08.22 |