Compose navigation

Kotlin DSL을 사용하면 Kotlin 코드로 직접 navigation graph를 만들 수 있다.

이 navigation system은 문자열 경로를 기반으로 만들어졌다.

만약에 issuesdestination이 있고 issueNumber를 argument로 가진다면 다음과 같이 만들어진다.

composable(
    route = "issues/{issueNumber}",
    arguments = listOf(
        navArgument("issueNumber") {
            type = NavType.Int,
            nullable = false
        },
    )
) {

하지만 String으로 선언되어 있어 컴파일 타임 시 Type-safe하지 않다는 문제가 있다.

즉, 런타임 시에 잘못된 타입으로 비정상 종료를 할 수 있다.

예를 들어서, 아래와 같이 작성해도 컴파일 시 알지 못하고 이에 대한 책임은 개발자에게 돌아간다.

navController.navigate("issues/issue12")   // X 

Type-Safe navigation

Navigation 2.8.0부터 Kotlinx Serialization을 사용하여 Type Safety한 navigation을 지원한다.

문자열 기반 navigation system 위에 추가된 새로운 레이어이다.

문자열이 아닌 Kotlin class의 인스턴스나 객체 받아 내부적으로 문자열로 직렬화를 한다.

따라서 문자열을 직접 다루는 것이 아닌 Kotlin objects만 다루면 되기 때문에 Type-safe하게 데이터를 주고 받을 수 있다.

또한 toRoute()확장 함수를 지원하여 안전하고 쉽게 argument를 얻을 수 있다.