class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); }class AppDatabase extends _$AppDatabase는 Flutter와 Drift를 사용하여 데이터베이스를 정의하고 초기화하는 부분입니다. 특히 이 구문은 데이터베이스를 생성하고 연결하는 과정을 담당합니다.
class AppDatabaseAppDatabase는 앱에서 사용할 데이터베이스 클래스입니다. extends _$AppDatabase_$AppDatabase를 확장합니다._$AppDatabase는 Drift가 테이블 정보와 관련된 모든 기능(테이블 생성, 데이터 읽기/쓰기 등)을 자동으로 정의한 클래스입니다.AppDatabase가 Drift가 제공하는 모든 데이터베이스 기능을 사용할 수 있습니다.AppDatabase() : super(_openConnection());AppDatabase()는 데이터베이스 객체를 생성할 때 호출됩니다.: super(_openConnection()):super는 부모 클래스의 생성자를 호출합니다._$AppDatabase입니다._$AppDatabase는 데이터베이스 연결 객체(GeneratedDatabase)가 필요하며, 이는 _openConnection() 함수에서 반환됩니다._openConnection()의 역할_openConnection()가 어떻게 동작하나요?_openConnection() 함수는 LazyDatabase를 반환하며, 이 함수가 데이터베이스 초기화를 처리합니다.
LazyDatabase _openConnection() {
return LazyDatabase(() async {
// 데이터베이스 파일 저장 위치 얻기
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'db.sqlite'));
// 안드로이드 호환성을 위해 설정
if (Platform.isAndroid) {
await applyWorkaroundToOpenSqlite3OnOldAndroidVersions();
}
// SQLite 임시 디렉토리 설정
final cachebase = await getTemporaryDirectory();
sqlite3.tempDirectory = cachebase.path;
// NativeDatabase 생성 및 반환
return NativeDatabase.createInBackground(file);
});
}
경로 설정:
getApplicationDocumentsDirectory()로 데이터베이스 파일을 저장할 앱 디렉토리를 가져옵니다.p.join으로 디렉토리 경로와 파일 이름을 결합하여 운영체제에 상관없이 적절한 경로를 생성합니다.C:\\Users\\flutter\\db.sqlite/Users/flutter/db.sqlite안드로이드 호환성:
applyWorkaroundToOpenSqlite3OnOldAndroidVersions()을 호출합니다.SQLite 임시 디렉토리 설정:
데이터베이스 초기화:
NativeDatabase.createInBackground(file)를 호출하여 데이터베이스를 비동기로 생성합니다.AppDatabase 객체 생성:
final db = AppDatabase();
AppDatabase 생성자가 호출됩니다._$AppDatabase)의 생성자를 호출합니다.부모 클래스의 생성자 호출:
super(_openConnection())를 통해 _openConnection() 함수가 실행됩니다.데이터베이스 연결 설정:
_openConnection() 함수에서 데이터베이스 파일의 경로를 생성하고, SQLite 데이터베이스를 초기화하여 Drift에 전달합니다.자동 생성된 Drift 기능 사용:
_$AppDatabase는 drift.g.dart에서 자동 생성된 데이터베이스 클래스입니다. 이 클래스는 정의된 테이블과 데이터 읽기/쓰기 메서드를 제공합니다.await db.into(db.scheduleTable).insert(ScheduleTableCompanion(
name: Value('My Task'),
date: Value(DateTime.now()),
));AppDatabase는 데이터베이스 연결의 "설계도"입니다.
_$AppDatabase는 Drift가 자동으로 만들어준 "엔진"입니다.
_openConnection()는 데이터베이스를 연결하는 "키"입니다.
class AppDatabase extends _$AppDatabase {
// 데이터베이스 생성자
AppDatabase() : super(_openConnection());
// 데이터베이스 버전 설정
int get schemaVersion => 1;
}
AppDatabase(): 데이터베이스 객체를 생성합니다.: super(_openConnection()): 부모 클래스(_$AppDatabase)에 데이터베이스 연결을 전달합니다._openConnection(): 데이터베이스 파일 경로를 설정하고 SQLite를 초기화하여 Drift와 연결합니다.