데브허브 | DEVHUB | Navigation3 Basics (NavDisplay, Arguments, ViewModels)Navigation3 Basics (NavDisplay, Arguments, ViewModels)
- Navigation 3 소개: Jetpack Compose 및 Compose Multiplatform을 위한 Google의 새로운 내비게이션 라이브러리입니다. 🚀
- 주요 개선점: 기존 Compose Navigation의 가장 큰 문제였던 백스택 관리를 개선하여 개발자가 백스택 데이터 구조를 직접 제어할 수 있게 합니다. 🧠
- 백스택 제어: Navigation 3에서는 개발자가 백스택을 소유하고, 요소를 추가, 제거, 심지어 재정렬까지 할 수 있어 앱 내비게이션에 대한 훨씬 더 많은 제어권을 제공합니다. 🛠️
- 호환성: Compose Multiplatform 및 네이티브 Android 프로젝트 모두에서 95% 동일한 코드로 사용할 수 있으며, 이 플레이리스트는 두 환경 모두를 지원하도록 설계되었습니다. 🤝
- 안정성: 네이티브 Android에서는 안정 버전이며, Compose Multiplatform의 Android 측면에서도 안정적이지만, iOS 및 데스크톱 측면에서는 현재 알파 버전입니다. 🧪
- 핵심 의존성:
navigation-3-ui (UI 컴포저블), lifecycle-viewmodel-nav3 (뷰모델 스코핑), 그리고 kotlinx.serialization 플러그인이 필수적입니다. 🔗
- KotlinX Serialization의 중요성: 내비게이션 목적지(화면/경로)를 직렬화하여 화면 회전 및 구성 변경 시 백스택을 유지하는 데 사용됩니다. 💾
- 경로(Route) 정의:
sealed interface를 사용하여 앱의 모든 화면을 정의하며, 각 화면은 인자가 없는 data object 또는 인자가 있는 data class로 표현됩니다. 🗺️
- NavKey 인터페이스: 정의된 모든 경로(Route)는
@Serializable 어노테이션과 함께 NavKey 인터페이스를 구현해야 백스택에서 사용될 수 있습니다. 🔑
- ViewModel 통합: 각 화면의 로직을 담는
ViewModel은 내비게이션 3의 백스택에 있는 화면의 수명 주기에 맞춰 스코프됩니다. 💡
- 예시 프로젝트: 간단한 할 일 목록(List)과 상세(Detail) 화면 간의 내비게이션을 구현하여 기본적인 설정을 보여줍니다. 📝