CareVision
환자 곁에서 늘 함께, 간호사의 눈이 되어주는 환자 모니터링 서비스
Github : https://github.com/SSU-Capstone-Aurora
3-2 소프트웨어학부 캡스톤1 수업에서 진행하는 프로젝트 입니다.
Kotlin DSL과 Navigation Compose에서의 타입 안정성
주로 위 링크의 공식문서를 기반으로 Jetpack Compose Navigation 세팅을 진행했습니다.
*사진 출처: https://newsletter.jorgecastillo.dev/p/the-composable-node-tree
Kotlin DSL와 Navigation Compose에서의 타입 안전성 공식 문서에서는 Navigation 2.8.0 버전부터 Compose에서 TypeSafety한 Route를 사용가능하다고 합니다. 따라서 아래와 같이 Kotlin-Serialize에 대한 의존성 추가도 필요합니다.
*TypeSafety에 대한 이야기는 추후에 할 예정입니다.
kotlinxSerialization = "1.9.0"
kotlinxSerializationJson = "1.6.3"
composeNavigation = "2.8.0-alpha08"
[libraries]
androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "composeNavigation" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
[pugins]
kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinxSerialization" }
alias(libs.plugins.kotlinx.serialization) apply false
plugins {
alias(libs.plugins.kotlinx.serialization)
}
dependencies {
implementation(libs.kotlinx.serialization.json)
}
Jetpack Compose Navigation을 위해 알아야 하는 개념들은 아래와 같습니다.
저는 이 개념을 공부하면서 사실 크게 개념이 와닿지 않았는데, 계속 읽을수록 트리구조가 떠올랐습니다.
다시 말해,
Jetpack Compose Navigation을 트리 구조에 비유하면, NavHost가 트리의 뿌리 역할을 하며, 전체 탐색 흐름을 시작합니다.
NavGraph는 이 트리의 가지처럼 여러 목적지 간의 경로와 관계를 정의합니다.
NavController는 나무의 줄기처럼 다양한 목적지 간의 이동을 제어하며, 화면 전환을 관리합니다.
Destination은 트리의 잎사귀처럼 각 화면(Screen)을 나타내며,
Route는 각 목적지로 가는 고유 경로를 지정해 데이터를 전달할 수 있게 합니다.
모든 화면에 대해 개별 NavGraph를 만들 필요는 없습니다.
하나의 NavGraph에 여러 화면을 정의할 수 있고, 필요할 때만 중첩 NavGraph를 추가하는 것이 일반적입니다.
기능별로 독립적인 흐름을 유지할 때 필요한 화면 그룹에 중첩 NavGraph를 적용하는 것이 좋습니다.
중첩 그래프는 하나의 큰 트리 안에 서브 트리들이 존재하는 구조로 비유할 수 있습니다.
큰 트리의 NavController는 서브 트리 안팎의 이동을 조정하며, 서브 트리 내의 NavHost는 해당 기능에 특화된 탐색을 관리합니다. 서브 트리 내에서 자유롭게 이동하면서도 필요할 때 주 트리로 되돌아올 수 있는 구조로, 전체 흐름 속에서도 독립적으로 동작합니다.
따라서 이 중첩 그래프라는 개념이 있기에 우리는 Compose Navigation 설계가 Navigation에 대한 구현 전에 필요합니다.
중첩 그래프를 잘 활용한다면 앱의 네비게이션 구조가 간결해질 수 있습니다.
다음 포스팅에서는 직접 CareVision에서 사용했던 Navigation코드와 함께 Compose Navigation을 설계하고 구현했던 내용을 공유해보겠습니다.