Kotlin DSL을 사용하면 Kotlin 코드로 직접 navigation graph를 만들 수 있다.
이 navigation system은 문자열 경로를 기반으로 만들어졌다.
만약에 issues
destination이 있고 issueNumber
를 argument로 가진다면 다음과 같이 만들어진다.
composable(
route = "issues/{issueNumber}",
arguments = listOf(
navArgument("issueNumber") {
type = NavType.Int,
nullable = false
},
)
) {
하지만 String으로 선언되어 있어 컴파일 타임 시 Type-safe
하지 않다는 문제가 있다.
즉, 런타임 시에 잘못된 타입으로 비정상 종료를 할 수 있다.
예를 들어서, 아래와 같이 작성해도 컴파일 시 알지 못하고 이에 대한 책임은 개발자에게 돌아간다.
navController.navigate("issues/issue12") // X
Navigation 2.8.0
부터 Kotlinx Serialization
을 사용하여 Type Safety
한 navigation을 지원한다.
문자열 기반 navigation system 위에 추가된 새로운 레이어이다.
문자열이 아닌 Kotlin class의 인스턴스나 객체 받아 내부적으로 문자열로 직렬화를 한다.
따라서 문자열을 직접 다루는 것이 아닌 Kotlin objects만 다루면 되기 때문에 Type-safe하게 데이터를 주고 받을 수 있다.
또한 toRoute()
확장 함수를 지원하여 안전하고 쉽게 argument를 얻을 수 있다.