본문으로 이동

플러터:데이터 저장(간단한 데이터): 두 판 사이의 차이

학교의 모든 지식. SMwiki
편집 요약 없음
4번째 줄: 4번째 줄:
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.


SharedPreferences를 사용하여 간단한 key에 값을 저장하는 방법에 대해 다룬다. 대량 데이터 저장엔 적합하지 않음.
Hive는 **빠르고 강력한 로컬 데이터베이스**로, 여러 개의 데이터나 구조화된 모델을 저장하기에 적합하다.
SharedPreferences보다 성능이 뛰어나고, 대량 데이터(수백~수천 개) 저장에도 안정적이다.


=== 저장위치 ===
=== Hive의 특징 ===
* 매우 빠름 (binary 기반)
* 리스트, Map, 객체까지 저장 가능
* 앱 재시작 후에도 유지됨
* 오프라인 DB 역할 수행
* iOS/Android 모두 지원
 
== Hive 저장 위치 ==
{| class="wikitable"
{| class="wikitable"
|+
|+
13번째 줄: 21번째 줄:
!비고
!비고
|-
|-
|안드로이
|안드로이드
|/data/data/<패키지명>/shared_prefs/<파일명>.xml
|/data/data/'''<패키지명>'''/files/hive/
|
|
* 이 경로는 앱만 접근 가능
* 앱만 접근 가능
* 사용자가 파일 앱으로 볼 수 없음
* 파일 앱에서 보이지 않음
* 앱을 삭제하면 같이 삭제됨
* 앱 삭제 시 데이터도 삭제됨
* 앱을 종료하거나 재부팅해도 파일은 그대로 있음
* 앱 종료/재부팅해도 유지됨
|-
|-
|iOS
|iOS
|Library/Preferences/<bundle_identifier>.plist
|Application/<UUID>/Documents/hive/
|
|
* 앱 내부 전용 저장 공간
* 앱 내부 전용 저장 공간
* 앱 종료 후에도 유지
* 앱 종료 후에도 유지
* 앱 삭제 시 같이 삭제
* 앱 삭제 시 같이 삭제
|-
|
|
|
|}
|}


== 앱 재시작 후에도 데이터 유지(SharedPreferences) ==
== Hive로 데이터 유지하기 ==
간단한 숫자, 문자열, bool 저장 가능.
숫자, 문자열, 리스트, 객체 등 다양한 구조를 저장 가능.


=== 준비 ===
=== 준비 ===
<syntaxhighlight lang="yaml">
<syntaxhighlight lang="yaml">
dependencies:
dependencies:
   shared_preferences: ^2.1.1
   hive: ^2.2.3
  hive_flutter: ^1.1.0
 
dev_dependencies:
  hive_generator: ^2.0.0
  build_runner: ^2.4.0
</syntaxhighlight>
 
=== 초기화 ===
App 시작 시 Hive 초기화 필요.
 
<syntaxhighlight lang="dart">
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  await Hive.openBox('decibelBox');
  runApp(MyApp());
}
</syntaxhighlight>
</syntaxhighlight>


=== 저장하기 ===
=== 저장하기 ===
<syntaxhighlight lang="dart">
<syntaxhighlight lang="dart">
final prefs = await SharedPreferences.getInstance();
var box = Hive.box('decibelBox');
await prefs.setDouble('decibel', 85);
box.put('decibel', 85.0);
</syntaxhighlight>
</syntaxhighlight>
* `'decibel'` key에 85 저장
* `'decibel'` key에 85 저장
* “기본값 85” 의미가 아니라, 지금 저장하는 값
* Hive는 binary 저장 형식이라 빠르고 안정적임


=== 불러오기 ===
=== 불러오기 ===
<syntaxhighlight lang="dart">
<syntaxhighlight lang="dart">
double decibel = prefs.getDouble('decibel') ?? 0;
var box = Hive.box('decibelBox');
double decibel = box.get('decibel', defaultValue: 0.0);
</syntaxhighlight>
</syntaxhighlight>
* 저장된 값이 없으면 null 반환
 
* null일 경우 안전하게 0으로 사용 (`?? 0`)
== 왜 Hive를 사용하는가? ==
=== SharedPreferences 단점 ===
* 단순 key-value만 저장 가능 
* XML 기반 → 속도 느림 
* 데이터가 많아지면 성능 급격히 저하 
* 구조화된 데이터 저장 어려움 
 
=== Hive 장점 ===
* 구조화된 데이터 저장 가능 (클래스 형태도 저장)
* 수백~수천 개 데이터 저장해도 빠름
* 로컬 DB처럼 사용 가능 
* 대량 데이터 + 리스트 + 정렬/삭제 필요할 때 적합
 
== 결론 ==
* 단순 앱 설정값 → SharedPreferences 가능 
* 여러 개의 기록, 리스트, 구조화된 데이터 → **Hive 사용이 정답**

2025년 11월 26일 (수) 02:10 판

틀:플러터 Dart:개요 플러터에 대한 지식 분류

  1. 플러터:개요
    1. 플러터:VSCode
    2. 플러터:안드로이드 스튜디오
  2. 플러터:실행
  3. 플러터:개념 잡기
    1. 플러터:화면 하나 만들기
    2. 플러터:변하는 화면(StatefulWidget)
    3. 플러터:화면 전환(화면 쌓기, 하단 네비게이션 바)
    4. 플러터:화면 전환(Drawer)
    5. 플러터:입력 관련
      1. 플러터:버튼
      2. 플러터:키보드 입력
      3. 플러터:슬라이더
    6. 플러터:그래프 그리기(fl chart)
    7. 플러터:데이터 저장(간단한 데이터)
    8. 플러터:인증(Firebase 인증)(미완)
    9. 플러터:인증(OAuth2)(미완)
  4. 권한 사용
    1. 플러터:마이크 입력
  5. 위젯
    1. 플러터:아이콘
    2. 플러터:레이아웃 계열 위젯
    3. 플러터:네비게이션 계열 위젯
    4. 플러터:버튼
    5. 플러터:상태관리(미완)
  6. 플러터:DB연결
    1. 플러터:Firebase(미완)
    2. 플러터:MySQL(미완)
  7. 디자인
    1. 플러터:테마
    2. 플러터:앱바
  8. 플러터:배포
    1. 플러터:배포(안드로이드)(미완)
  9. 플러터:참고자료
  10. 플러터:위젯
    1. 플러터:공간배치용 위젯
  11. 플러터:구글 AdMob(미완)
  12. 플러터:라이브러리
    1. 플러터:logger

개요

Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.

Hive는 **빠르고 강력한 로컬 데이터베이스**로, 여러 개의 데이터나 구조화된 모델을 저장하기에 적합하다. SharedPreferences보다 성능이 뛰어나고, 대량 데이터(수백~수천 개) 저장에도 안정적이다.

Hive의 특징

  • 매우 빠름 (binary 기반)
  • 리스트, Map, 객체까지 저장 가능
  • 앱 재시작 후에도 유지됨
  • 오프라인 DB 역할 수행
  • iOS/Android 모두 지원

Hive 저장 위치

운영체제 설명 비고
안드로이드 /data/data/<패키지명>/files/hive/
  • 앱만 접근 가능
  • 파일 앱에서 보이지 않음
  • 앱 삭제 시 데이터도 삭제됨
  • 앱 종료/재부팅해도 유지됨
iOS Application/<UUID>/Documents/hive/
  • 앱 내부 전용 저장 공간
  • 앱 종료 후에도 유지
  • 앱 삭제 시 같이 삭제

Hive로 데이터 유지하기

숫자, 문자열, 리스트, 객체 등 다양한 구조를 저장 가능.

준비

dependencies:
  hive: ^2.2.3
  hive_flutter: ^1.1.0

dev_dependencies:
  hive_generator: ^2.0.0
  build_runner: ^2.4.0

초기화

App 시작 시 Hive 초기화 필요.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();
  await Hive.openBox('decibelBox');
  runApp(MyApp());
}

저장하기

var box = Hive.box('decibelBox');
box.put('decibel', 85.0);
  • `'decibel'` key에 85 저장
  • Hive는 binary 저장 형식이라 빠르고 안정적임

불러오기

var box = Hive.box('decibelBox');
double decibel = box.get('decibel', defaultValue: 0.0);

왜 Hive를 사용하는가?

SharedPreferences 단점

  • 단순 key-value만 저장 가능
  • XML 기반 → 속도 느림
  • 데이터가 많아지면 성능 급격히 저하
  • 구조화된 데이터 저장 어려움

Hive 장점

  • 구조화된 데이터 저장 가능 (클래스 형태도 저장)
  • 수백~수천 개 데이터 저장해도 빠름
  • 로컬 DB처럼 사용 가능
  • 대량 데이터 + 리스트 + 정렬/삭제 필요할 때 적합

결론

  • 단순 앱 설정값 → SharedPreferences 가능
  • 여러 개의 기록, 리스트, 구조화된 데이터 → **Hive 사용이 정답**