[Android] Jetpack Navigation — Migrate to Compose — Overview

Kenneths
Kenneth Android
Published in
4 min readDec 20, 2022
Photo by Dan Chung on Unsplash

Jetpack Navigation은 2018년 5월 8일에 1.0.0-alpha01 을 시작으로 2019년 3월 14일에 1.0.0 정식버전이 출시되고 공식 영상이 공개되면서 안드로이드 개발자 진영에서 관심을 받기 시작했습니다.

기존에 여러 안드로이드 앱들은 Activity와 Fragment를 이용해 화면을 구현하고 있었고 각 회사마다 다양한 방법으로 본인들만의 탐색 방법을 연구하고 적용하였습니다. 2018년 Single Activity Architecture(SSA)라는 개념이 Google I/O 2018 등장하면서 SingleActivity에 대해서 많은 개발자들이 관심을 가지고 적용하려고 시도했습니다.

구글이 SSA를 권장한 이유는 Activity보다 Fragment로 화면들을 구성했을 때 다양한 이점(유연한 UI, 상대적으로 가벼움, 데이터 공유등)을 가지지만 장점만 있는 것은 아니었습니다. Fragment로 구현된 화면들을 제어하기 위한 백스택관리, 데이터 전달, 애니메이션, 딥링크등 해결해야할 문제들이 남아있있습니다. 이러한 문제들을 해결할 수 있게 도와주는 Jetpack 라이브러리중 하나인 Navigation 이라는 라이브러리를 제공하고 이를 이용하면 탐색 원리를 준수하고 일관적이고 예측 가능한 사용자 경험을 보장하게 합니다.

Navigation Component

Navigation의 구성요소는 크게 3가지로 구성되어 있습니다.

Navigation Graph

  • 모든 Navigation 관련 정보가 하나의 중심에 모여있는 Graph
  • Destination 라고 불리는 개별적인 콘텐츠 영역을 포함하고 유저들이 Destination들로 이동 가능한 경로를 포함

NavHost

  • 탐색그래프에서 Destination 들을 표시하게 해주는 Empty 컨테이너

NavController

  • NavHost에서 탐색을 관리하는 객체로서 사용자가 앱 내에서 이동할 때 NavHost에서 콘텐츠의 Destination 전환을 조율합니다

Navigation Component 의 장점

  • Fragment의 트랜잭션을 처리
  • 위로와 뒤로와 같은 처리를 자연스럽게 처리
  • 애니메이션과 트랜지션을 위한 표준화된 리소스 제공
  • 딥 링크에 대해서 구현하고 처리
  • Navigation Drawer나 Bottom Navigation과 같은 Navigation UI패턴과의 연동을 간략화
  • Safe Args — Destination간 탐색할 때 타입 안전성(type safety)을 보장한 데이터를 전달하기 위한 gradle 플러그
  • ViewModel 지원 — 그래프내에 있는 Destination들끼리 ViewModel에 있는 UI와 관련된 데이터들을 공유

Next

Navigation Component에 대해서 간략하게 알아보았습니다. 기존 Activity나 Fragment로 작성할 때는 안드로이드 시스템에서 제공되는 API를 이용해 화면을 전환했다면 Compose에서는 별도의 트랜지션을 구현하지는 않는 이상 Navigation 컴포넌트가 앱을 구성하는데 있어서 많음 도움이 될 수 있다고 생각합니다. 이어지는 글에서는 실제로 Fragment를 이용해 Navigation Component를 구현하고 이를 Compose로 마이그레이션 하는 작업을 공유할 예정입니다. 👋

--

--

Kenneths
Kenneth Android

사용자들에게 편리하고 AweSome UI, UX를 경험해주고 싶은 상위 티어 개발자가 되고싶어 달려가고있는 개발자입니다. 다양한 내용들을 공유하려고 합니다.