Navigation의 세 가지 주요 부분은

NavController

NavGraph

NavHost

가 있다.

NavController

NavController는 Navigation을 사용할 떄 중심이 되는 구성요소이다. Stateful이며 백 스택 컴포저블 항목을 추적하고, 스택을 앞으로 이동하고, 백 스택 조작을 사용 설정하고, 대상 상태 간에 이동한다.

컴포저블에서 rememberNavController() 메서드를 이용하여 NavController를 만들 수 있다.

val navController = rememberNavController()

NavHost

Navigation Graph에 정의된 화면들을 보여주는 컨테이너 역할을 한다. 대상 구성요소에는 프래그먼트 대상을 표시하는 기본 NavHost 구현인 NavHostFragement가 포함된다.

NavHost(navController = navController, startDestination = "profile") {
    composable(route = "profile") { Profile(/*...*/) }
    composable(route = "friendslist") { FriendsList(/*...*/) }
    /*...*/
}
@Composable
fun Profile(navController: NavController) {
    /*...*/
    Button(onClick = { navController.navigate("friendslist") }) {
        Text(text = "Navigate next")
    }
    /*...*/
}
NavHost(startDestination = "profile/{userId}") {
    ...
    composable(
        "profile/{userId}",
        arguments = listOf(navArgument("userId") { type = NavType.StringType })
    ) {...}
}

NavGraph 분할