안드로이드 프레임워크·시스템 학습 노트 목차

Navigation — 화면 이동·백스택·타입 안전 경로

앱은 여러 화면을 오간다 — 목록에서 상세로, 뒤로 가기, 딥링크로 특정 화면 진입. 이 화면 이동과 백스택을 일관되게 다루는 게 Navigation 컴포넌트다. 현대 안드로이드는 단일 Activity + 여러 컴포저블 목적지 구조를 권장하고, Navigation이 그 사이 이동·인자 전달·백스택을 관리한다. (출처: Android — Navigation / Navigation Compose.)

단일 Activity 아키텍처

예전엔 화면마다 Activity였지만, 현대 권장은 단일 Activity + 화면은 컴포저블(또는 Fragment) 목적지다 — 화면 전환이 가볍고, 공유 요소·상태·백스택을 한 곳에서 관리한다. Navigation이 목적지(destination) 그래프를 들고 이동을 조율한다.

다이어그램 로딩 중…

Navigation Compose — NavHost와 navigate

val navController = rememberNavController()
NavHost(navController, startDestination = "list") {
    composable("list") {
        ListScreen(onItemClick = { id -> navController.navigate("detail/$id") })
    }
    composable(
        "detail/{id}",
        arguments = listOf(navArgument("id") { type = NavType.LongType })
    ) { backStackEntry ->
        val id = backStackEntry.arguments?.getLong("id") ?: return@composable
        DetailScreen(id)
    }
}
  • NavHost목적지 그래프를 들고 현재 목적지를 그린다.
  • navController.navigate(route) — 이동(백스택에 push).
  • 인자 — 경로에 {id}로 싣고 arguments로 타입 지정.

타입 안전 경로 (Navigation 2.8+)

문자열 경로("detail/$id")는 오타·타입 오류가 런타임에야 터진다. *Navigation 2.8+*는 타입 안전 경로직렬화 가능한 객체/data class를 목적지로 써서 컴파일 타임에 검증한다.

@Serializable data class Detail(val id: Long)     // 타입 안전 목적지
composable<Detail> { entry ->
    val args = entry.toRoute<Detail>()
    DetailScreen(args.id)
}
navController.navigate(Detail(id = 42))            // 타입 안전 이동

백스택과 popUpTo

navigate백스택에 쌓고, *뒤로 가기/popBackStack()*은 pop한다. 로그인 후 로그인 화면을 스택에서 제거하거나 탭 전환에서 중복을 막을popUpTo·launchSingleTop을 쓴다.

navController.navigate("home") {
    popUpTo("login") { inclusive = true }   // 로그인까지 스택에서 제거
    launchSingleTop = true                   // 맨 위면 중복 생성 안 함
}

중첩 그래프·딥링크

  • 중첩 그래프(nested graph)기능 단위로 그래프를 묶어(예: 인증 플로우) 모듈화([andarch 06]).
  • 딥링크(deep link)URL/알림으로 특정 목적지에 바로 진입. 백스택을 합성해 자연스러운 뒤로 가기를 만든다.

정리 — 이동과 백스택을 한 곳에서

Navigation의 핵심 — 단일 Activity + 컴포저블 목적지, NavHost+navController.navigate로 이동·인자 전달, 2.8+의 타입 안전 경로로 컴파일 타임 검증, popUpTo/launchSingleTop으로 백스택 제어, 중첩 그래프·딥링크. 화면 이동을 그래프로 선언하면 백스택·인자·딥링크가 일관되게 다뤄진다.

한 줄 요약 — 단일 Activity + 목적지 그래프. NavHost+navigate(route), 인자는 경로 {id}/navArgument. 2.8+ 타입 안전 경로(@Serializable data class·navigate(Detail(id)))로 컴파일 검증. 백스택은 popBackStack/popUpTo/launchSingleTop. 중첩 그래프·딥링크.

(출처: Android — Navigation Compose / Type safety / Navigate with arguments / Navigation 2.8 type-safe routes.)

WorkManager — 지연 가능·보장 백그라운드 작업코루틴 on Android — lifecycleScope·repeatOnLifecycle