SlideShare a Scribd company logo
데이터 저장과 사용
데이터 저장 유형
대용량 및 일반 데이터
설정 상태 데이터
빈번히 변경되는 데이터 파일
Preference
SQLite 데이터베이스
영속성 있는 데이터들
파일 위치에 따라서
리눅스 기반 파일
App 범위
SD 카드 속 파일
파일 시스템
접근에 대한 보안 레벨이 다릅니다.
시스템 파일 접근
• 안드로이드 파일 시스템은 Linux 시스템.
사용되는 라이브러리는 java 라이브러리.
• App 마다 접근 가능 공간 한정
– 위치: /data/data/패키지명/files 하단
– 해당 위치 하단 no – depth. 이름으로만 구분
• 접근자는 Context 수준에서 제공
– public abstract FileInputStream openFileInput (String name)
• Name에 “/”가 포함되면 에러 처리.
– public abstract FileOutputStream openFileOutput (String name,
int mode)
• Mode는 접근도에 따라서
MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
일반적인 파일 처리 과정
App에서 사용되는 파일들로서
Package에 포함 배포되는
res 폴더 하단 raw 폴더 안에
있는 파일에 대한 처리
다른 App에서 접근
• 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의.
• 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경
유해서 들어와야 합니다.
– Context otherContext = createPackageContext(“exam.andexam”,
Context.CONTEXT_IGNORE_SECURITY);
FileInputStream fis =otherContext.openFileInput(“test.txt”);
SD 카드 속 파일 접근
• SD 카드는 공용 저장소.
• 안드로이드는 SD 카드에 대해서
보안 관리 하지 않음.
• Java에서 일반 파일 다루듯.
• 주의할 점은 경로를 hard
coding이 아닌 아래 방법 통해
서 취할 것.
– Environment.getExternalStorageDirectory()
Preference 사용하기
• App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야
할 데이터들을 위한 기능
• Preference를 통해 관리되는 정보는 xml 파일 형태로 저
장
– 입력/출력 형태는 Map (key/value) 형태.
– 파일이라 동시성 고려.
Transaction 처리 = commit, editor
기본값.
꼬옥 활용!
조직화된 데이터 = SQLite
• SQLite = 내장형 소규모 데이터베이스
– 안드로이드 내에 내장해서 제공.
• SQLiteOpenHelper = DB를 생성/오픈 담당
– abstract class
– SQLiteOpenHelper를 상속해서
onCreate, onUpgrade, onOpen을 구현.
– getReadableDatabase, getWritableDatabase 호출 될 때
적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행
• 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한
Main Thread에서 호출은 피하도록 한다.
DBHelper : SQLite DB 초기화
참고: 관련 SQL들
onCreate: 처음 수행/초기화
onUpdate: 업데이트 발생 시 초기화
1. dbVersrion 값을 변경.
2. 수행 시에 onUpgrade 수행
16 데이터 저장과 사용
DB와 Cursor
• Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하
고 난 뒤에는 cursor도 db도 close를 해야 합니다.
• 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하
고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다.
• 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는
이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다.
• 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로
managedQuery입니다.
– 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장.
– 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.

More Related Content

PDF
웹 개발 스터디 01 - MySQL
PPT
SQLite Example
PDF
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
PDF
웹 개발 스터디 01 - PHP, MySQL 연동
PDF
2019 lightning talk_1
PPTX
Xe 오픈소스 읽어보기 part 2
PDF
웹 개발 스터디 01 - PHP
PDF
Mongo db 2장
웹 개발 스터디 01 - MySQL
SQLite Example
웹 개발 스터디 01 - PHP 파일 업로드, 다운로드
웹 개발 스터디 01 - PHP, MySQL 연동
2019 lightning talk_1
Xe 오픈소스 읽어보기 part 2
웹 개발 스터디 01 - PHP
Mongo db 2장

Viewers also liked (7)

PDF
15 content provider
PDF
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
PDF
안드로이드에서 spinner와 DB 연결 간단 예제
PDF
안드로이드 어플 개발 전략 10가지 2부
PPTX
안드로이드 DB, 서버 연동하기
PDF
졸업프로젝트 어플리케이션 발표자료
PDF
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
15 content provider
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
안드로이드에서 spinner와 DB 연결 간단 예제
안드로이드 어플 개발 전략 10가지 2부
안드로이드 DB, 서버 연동하기
졸업프로젝트 어플리케이션 발표자료
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
Ad

Similar to 16 데이터 저장과 사용 (20)

PPTX
3장 이클립스 기반구조 eclipser
PDF
Portfolio
PPTX
Docspin 에셋에 대해
PPTX
Chapter 17
PDF
I/O '19 Extended in Korea Android : What's New in Shared Storage
PDF
LevelDB 간단한 소개
PPT
Hadoop Introduction (1.0)
PDF
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
PPTX
Html5
PPTX
CouchDB - Introduction - Korean
PDF
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
PPTX
PDF
ibatis_khhan
PDF
Ibatis
PPTX
about hadoop yes
PDF
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
PPTX
10 동기및비동기장치io
PDF
Object storage의 이해와 활용
PPTX
Scalable web architecture and distributed systems
PPTX
Scalable web architecture and distributed systems
 
3장 이클립스 기반구조 eclipser
Portfolio
Docspin 에셋에 대해
Chapter 17
I/O '19 Extended in Korea Android : What's New in Shared Storage
LevelDB 간단한 소개
Hadoop Introduction (1.0)
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
Html5
CouchDB - Introduction - Korean
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
ibatis_khhan
Ibatis
about hadoop yes
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
10 동기및비동기장치io
Object storage의 이해와 활용
Scalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
Ad

More from 운용 최 (20)

PDF
Wot(daliworks) 20131113
PDF
NIPA SW Insight Report '13.08
PDF
Agile Spirit Base On The Book "Agile Samuari"
PDF
Uml intro 1
PDF
Uml intro 0
PDF
21 application and_network_status
PDF
20 handler and_async_task
PDF
18 안드로이드 리스트뷰_속도향상
PDF
19 나만의 view 만들기
PDF
17 adapter view & db
PDF
14 broad castreceiver
PDF
13 service 좀더
PDF
12 service
PDF
11 tablet 대응 가이드
PDF
10 view orientation_change
PDF
09 android keyboard & layout
PDF
08 fragment 태블릿 대응
PDF
08 font size
PDF
07 다양한 device_대응_방법
PDF
06 activity stack and back, flag
Wot(daliworks) 20131113
NIPA SW Insight Report '13.08
Agile Spirit Base On The Book "Agile Samuari"
Uml intro 1
Uml intro 0
21 application and_network_status
20 handler and_async_task
18 안드로이드 리스트뷰_속도향상
19 나만의 view 만들기
17 adapter view & db
14 broad castreceiver
13 service 좀더
12 service
11 tablet 대응 가이드
10 view orientation_change
09 android keyboard & layout
08 fragment 태블릿 대응
08 font size
07 다양한 device_대응_방법
06 activity stack and back, flag

16 데이터 저장과 사용

  • 2. 데이터 저장 유형 대용량 및 일반 데이터 설정 상태 데이터 빈번히 변경되는 데이터 파일 Preference SQLite 데이터베이스 영속성 있는 데이터들
  • 3. 파일 위치에 따라서 리눅스 기반 파일 App 범위 SD 카드 속 파일 파일 시스템 접근에 대한 보안 레벨이 다릅니다.
  • 4. 시스템 파일 접근 • 안드로이드 파일 시스템은 Linux 시스템. 사용되는 라이브러리는 java 라이브러리. • App 마다 접근 가능 공간 한정 – 위치: /data/data/패키지명/files 하단 – 해당 위치 하단 no – depth. 이름으로만 구분 • 접근자는 Context 수준에서 제공 – public abstract FileInputStream openFileInput (String name) • Name에 “/”가 포함되면 에러 처리. – public abstract FileOutputStream openFileOutput (String name, int mode) • Mode는 접근도에 따라서 MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
  • 5. 일반적인 파일 처리 과정 App에서 사용되는 파일들로서 Package에 포함 배포되는 res 폴더 하단 raw 폴더 안에 있는 파일에 대한 처리
  • 6. 다른 App에서 접근 • 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의. • 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경 유해서 들어와야 합니다. – Context otherContext = createPackageContext(“exam.andexam”, Context.CONTEXT_IGNORE_SECURITY); FileInputStream fis =otherContext.openFileInput(“test.txt”);
  • 7. SD 카드 속 파일 접근 • SD 카드는 공용 저장소. • 안드로이드는 SD 카드에 대해서 보안 관리 하지 않음. • Java에서 일반 파일 다루듯. • 주의할 점은 경로를 hard coding이 아닌 아래 방법 통해 서 취할 것. – Environment.getExternalStorageDirectory()
  • 8. Preference 사용하기 • App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야 할 데이터들을 위한 기능 • Preference를 통해 관리되는 정보는 xml 파일 형태로 저 장 – 입력/출력 형태는 Map (key/value) 형태. – 파일이라 동시성 고려. Transaction 처리 = commit, editor 기본값. 꼬옥 활용!
  • 9. 조직화된 데이터 = SQLite • SQLite = 내장형 소규모 데이터베이스 – 안드로이드 내에 내장해서 제공. • SQLiteOpenHelper = DB를 생성/오픈 담당 – abstract class – SQLiteOpenHelper를 상속해서 onCreate, onUpgrade, onOpen을 구현. – getReadableDatabase, getWritableDatabase 호출 될 때 적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행 • 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한 Main Thread에서 호출은 피하도록 한다.
  • 10. DBHelper : SQLite DB 초기화
  • 13. onUpdate: 업데이트 발생 시 초기화 1. dbVersrion 값을 변경. 2. 수행 시에 onUpgrade 수행
  • 15. DB와 Cursor • Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하 고 난 뒤에는 cursor도 db도 close를 해야 합니다. • 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하 고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다. • 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는 이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다. • 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로 managedQuery입니다. – 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장. – 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.