연습: Bus Schedule 앱 빌드

1. 시작하기 전에

소개

Room을 사용하여 데이터 유지 Codelab에서는 Android 앱에서 Room 데이터베이스를 구현하는 방법을 알아봤습니다. 이 연습에서는 개별적으로 수행할 수 있는 일련의 단계를 통해 Room 데이터베이스 구현을 좀 더 자세히 알아봅니다.

이 연습 세트에서는 Room을 사용하여 데이터 유지 Codelab에서 배운 개념을 활용하여 Bus Schedule 앱을 완성합니다. 이 앱은 Room 데이터베이스에서 제공한 데이터를 사용하여 사용자에게 버스 정류장 및 예정된 출발 시간 목록을 표시합니다.

솔루션 코드는 마지막에 제공됩니다. 이러한 학습 경험을 최대한 활용하려면 제공된 솔루션 코드를 살펴보기 전에 되도록 많이 구현해 보고 문제를 해결해 보세요. 실습 시간을 통해 가장 많이 배울 수 있습니다.

기본 요건

필요한 항목

  • 인터넷 액세스가 가능하고 Android 스튜디오가 설치된 컴퓨터
  • Bus Schedule 시작 코드

빌드할 항목

이 연습 세트에서는 데이터베이스를 구현한 후 이 데이터베이스를 사용해 UI에 데이터를 제공하여 Bus Schedule 앱을 완성합니다. 시작 코드에 있는 assets 디렉터리의 데이터베이스 파일에서 앱의 데이터를 제공합니다. 이 데이터를 데이터베이스에 로드하여 앱에서 읽을 수 있도록 제공합니다.

앱을 완성하면 버스 정류장 및 해당 버스 정류장의 도착 시간 목록이 표시됩니다. 목록에서 항목을 클릭하면 해당 정류장에 관한 데이터를 제공하는 세부정보 화면으로의 이동을 트리거할 수 있습니다.

완성된 앱에는 Room 데이터베이스에서 로드된 다음 데이터가 표시됩니다.

7fbafebbcc3a3eec.png

951621eedfc138fb.png

2. 시작 코드 다운로드하기

  1. Android 스튜디오에서 basic-android-kotlin-compose-training-bus-schedule 폴더를 엽니다.
  2. Android 스튜디오에서 Bus Schedule 앱 코드를 엽니다.
  3. Run 버튼 3e12ddc048503bc5.png을 클릭하여 앱을 빌드하고 실행합니다.

앱은 starter 브랜치 코드에서 빌드될 때 한 정류장을 표시하는 일정을 표시해야 합니다.

54aa202086b74e1c.png

3. 종속 항목 추가

앱에 다음 종속 항목을 추가합니다.

app/build.gradle.kts

implementation("androidx.room:room-ktx:${rootProject.extra["room_version"]}")
implementation("androidx.room:room-runtime:${rootProject.extra["room_version"]}")
ksp("androidx.room:room-compiler:${rootProject.extra["room_version"]}")

Room 문서에서 최신 안정화 버전의 room을 가져와 올바른 버전 번호를 추가해야 합니다. 현재 최신 버전은 다음과 같습니다.

build.gradle.kts

set("room_version", "2.5.1")

4. Room 항목 만들기

현재 Bus Schedule 데이터 클래스를 Room Entity로 변환합니다.

다음 이미지는 스키마 및 Entity 속성을 비롯하여 최종 데이터 테이블이 표시되는 샘플을 보여줍니다.

d2ac3220c9a0f3ff.png

5. 데이터 액세스 객체 만들기

데이터 액세스 객체(DAO)를 만들어 데이터베이스에 액세스합니다 DAO는 데이터베이스의 모든 항목을 검색하는 메서드와 버스 정류장 이름으로 단일 항목을 검색하는 메서드를 제공합니다. 도착 시간을 기준으로 일정의 순서를 지정해야 합니다.

6. 데이터베이스 인스턴스 만들기

Entity 및 DAO를 사용하는 Room 데이터베이스를 만듭니다. 데이터베이스는 시작 코드에 있는 assets/database/bus_schedule.db 파일의 데이터를 사용하여 자체적으로 초기화됩니다.

7. ViewModel 업데이트

DAO에서 데이터를 가져오고, 샘플 데이터를 제공하는 대신 이 데이터를 UI에 제공하도록 ViewModel을 업데이트합니다. 두 DAO 메서드를 모두 활용하여 목록 및 개별 정류장에 관한 데이터를 제공해야 합니다.

8. 솔루션 코드