우리가 사용하는 iOS도 일반적인 컴퓨터의 운영체제와 같다. 파일시스템이 존재하는데, 보통 SDK와 같은 라이브러리에서 내장 DB를 사용한다.

- 앱이 배포된 폴더는 Documents 폴더를 찾아서 파일의 Read/Write 가능
우리가 흔히 사용하는 Foundation Framework는 파일과 디렉토리 관련 작업을 위해 세 가지 클래스를 제공한다.
-
FileManager : 생성, 이동, 파일 읽고 쓰기, 파일 속성 읽기 및 설정 등 기본적인 파일 디렉토리 작업을 수행
- let fileManger = FileManager.default // FileManager는 싱글톤 객체로 앱에서 하나의 참조로 제공
- let currentPath = fileManager.currentDirectoryPath // 현재 작업 디렉토리 확인
-
FileHandle : 파일의 로우레벨 작업을 수행 → 파일에서 특정한 위치로 이동, 특정한 바이트만큼 파일 읽기/쓰기, 기존 파일에 데이터 추가 등
- Documents 디렉토리 확인 → NSSearchPathForDirectoriesInDomains라는 이름의 C함수를 호출
- 임시 디렉토리 리턴 → let tmpDir = NSTempraryDirectory() as String
- 새로운 디렉토리 만들기 : if !fileManager.createDirectory(at: newDir, withIntermediateDirectories: true, attributes: nil, error: &error)
-
Data : 파일로부터 읽기/쓰기를 위한 유용한 저장소 버퍼 제공
SQLite 메서드 정리
- sqlite3_open() : 특정 데이터베이스 파일 오픈 및 생성
- sqlite3_close() : 오픈되어 있는 데이터베이스 파일 닫기
- sqlite3_prepare_v2() : 실행을 위해 SQL 문장을 준비
- sqlite3_step() : sqlite3_prepare_v2() : 함수에 의해 준비된 SQL문장을 실행
- sqlite3column() : SQL 추출 명령에 의한 결과에서 데이터 부분을 리턴
SQLite 랩퍼 클래스 사용
- SQLite는 C언어로 만들어졌고, 스위프트로 코딩할 때 C언어와 Swift의 격차를 해소야야함 → SQLite 랩퍼(wrapper)를 사용
FMDB 클래스
- sqlite3는 기능적으로 잘 구현된 라이브러리이지만, Swift에서 사용하기 좋은 모듈은 아님 → iOS 실무 개발에서는 객체 기반의 FMDB를 많이 사용
- FMDatabase : 단일 SQLite 데이터베이스를 나타내기 위해 사용 → 코드 내에서 SQL 구문이 실행되는 객체
- FMResultSet : FMDataBase 인스턴스의 SQL 쿼리 작업의 결과를 담음
- FMDatabaseQueue : 데이터베이스 쿼리가 다중 쓰레드로 실행되도록 설계된 버전의 FMDatabase
FMDB 생성 및 열기

FMDB 업데이트 구문 실행 (executeUpdate 메서드 사용)

SQL 실행 결과를 리턴할 때 결과 집합(ResultSet)이라고 부름

Build Phases에 .tdb 추가

Objective-C 클래스 파일을 추가하면 자동으로 브릿징 헤더가 추가되는데, 이 파일에 #import “FMDB.h”를 추가해야함
Swift에서의 DAO 클래스 구현

Data Access Object(DAO)는 SQL을 포함한 액션을 메서드 형태로 구현한 객체


- FMDB 깃 주소를 클론해서 fmdb 디렉토리내 헤더 및 파일 프로젝트 내 하위 디렉토리로 복사