Drift는 Flutter에서 SQLite를 사용하기 위한 ORM(Object-Relational Mapping) 라이브러리입니다. 테이블을 정의할 때는 클래스 기반으로 작성하며, SQL 쿼리를 직접 작성하지 않아도 클래스와 메서드를 통해 데이터베이스 작업을 쉽게 처리할 수 있습니다.
Drift에서 테이블은 Table 클래스를 상속받아 정의합니다. 각 컬럼(필드)은 get 키워드를 사용하여 선언되며, 컬럼의 데이터 타입과 옵션을 설정할 수 있습니다.
import 'package:drift/drift.dart';
class Schedule extends Table {
IntColumn get id => integer().autoIncrement()(); // 기본 키
IntColumn get startTime => integer()(); // 시작 시간
IntColumn get endTime => integer()(); // 종료 시간
TextColumn get content => text()(); // 일정 내용
DateTimeColumn get date => dateTime()(); // 날짜
TextColumn get color => text()(); // 카테고리
DateTimeColumn get createdAt =>
dateTime().clientDefault(() => DateTime.now().toUtc())(); // 생성 시각
}
class Schedule extends Table { ... }
Schedule이라는 이름으로 테이블을 생성하고, 각 컬럼은 클래스의 멤버로 정의됩니다.IntColumn get id => integer().autoIncrement()();
integer(): 정수형 데이터를 저장할 수 있는 컬럼을 정의합니다. .autoIncrement(): 자동 증가(primary key 역할) 기능을 추가합니다. ()(): 컬럼 정의를 최종적으로 완료합니다. Drift에서 반드시 호출해야 합니다. get: 컬럼을 읽기 전용으로 정의합니다.| 타입 | 역할 |
|---|---|
IntColumn | 정수형 데이터를 저장합니다. (예: ID, 시간 값) |
TextColumn | 문자열 데이터를 저장합니다. (예: 일정 내용) |
DateTimeColumn | 날짜와 시간을 저장합니다. (예: 일정 날짜, 생성 시각) |
IntColumn get id => integer().autoIncrement()();
IntColumn get startTime => integer()();
IntColumn get endTime => integer()();
TextColumn get content => text()();
DateTimeColumn get date => dateTime()();
2023-12-01)DateTimeColumn get createdAt =>
dateTime().clientDefault(() => DateTime.now().toUtc())();
clientDefault: 기본값을 설정하는 옵션입니다.()를 두 번 사용하는 이유IntColumn get id => integer().autoIncrement()();
integer()
.autoIncrement()
마지막 ()
=>)를 사용하는 이유IntColumn get id => integer().autoIncrement()();
=>는 Dart의 화살표 함수로, 단순히 간결한 함수 표현입니다.integer(), text(), dateTime() 테이블에 데이터를 삽입하려면 insert() 메서드를 사용합니다.
await db.into(db.schedule).insert(
SchedulesCompanion(
startTime: Value(900), // 9시 00분
endTime: Value(1100), // 11시 00분
content: Value('Flutter 공부'),
date: Value(DateTime.now()), // 오늘 날짜
color: Value('blue'), // 카테고리 색상
),
);
Value(): Drift에서 값을 삽입할 때 사용하는 래퍼 클래스입니다.SchedulesCompanion: Drift가 테이블의 값을 추가할 때 사용하는 객체입니다.build_runner를 통해 CRUD(Create, Read, Update, Delete) 관련 코드를 자동으로 생성해 줍니다.integer(), text(), dateTime() 등으로 설정합니다.()를 두 번 사용하는 이유는 메서드 체이닝의 최종 호출로 컬럼 정의를 완료하기 위해서입니다.=> 화살표 함수를 사용해 코드를 간결하게 표현합니다.insert() 메서드를 통해 처리됩니다.Drift를 처음 사용하는 개발자라면 위의 구조와 개념을 기반으로 시작하면 쉽게 이해할 수 있을 것입니다! 😊