노트: 프로젝트에서 네비게이션 컴포넌트를 사용하지 않더라도, 앱은 이 설계 원칙을 따라야 합니다.

그림 1. 리스트 화면이 Sunflower 앱의 시작 목적지임
Sunflower 앱을 실행할 때 사용자가 처음으로 보게 되는 화면은 정원에 있는 식물의 목록이 담긴 리스트 화면임, 이는 또한 앱을 나가기 전에 마지막으로 보이는 화면이기도 함, 만약 리스트 화면에서 뒤로가기 버튼을 누른다면 런처로 되돌아가게 됨노트: 앱은 설정이나 로그인과 같은 일회성 화면을 가질 수 있습니다. 이런 조건부 화면들은 사용자가 특정 경우에만 볼 수 있기 때문에 시작 목적지로 고려되면 안됩니다.
앱을 처음 실행했을 때 사용자를 위해 새로운 태스크를 만들고 시작 목적지를 사용자에게 보여줌, 시작 목적지는 백 스택의 기초 목적지가 되고 이 백 스택이 앱의 네비게이션 상태의 기초가 됨, 스택의 맨 위가 현재 화면을 나타내고 밑에 쌓여진 이전에 방문했던 목적지들은 사용자가 어떻게 현재 화면까지 도달했는지를 나타냄, 백 스택은 항상 스택의 맨 밑에 앱의 시작 목적지를 가지고 있음
새로운 목적지를 스택의 위에 넣거나 스택의 맨 위에 있는 목적지를 제거하는 등의 백 스택을 변경하는 작업은 항상 스택의 맨 위를 작업함, 새로운 목적지를 방문하는 것은 스택의 맨 위에 그 목적지를 넣는 작업을 함
네비게이션 컴포넌트는 모든 백 스택 순서를 관리하지만 직접 관리하도록 선택할 수 있음

그림 2. 상단의 뒤로가기 버튼과 뒤로가기 버튼
화면 하단에 나타나는 시스템 네비게이션 바에 있는 뒤로가기 버튼은 사용자가 최근에 작업한 화면에 있어서 역순으로 탐색하는데 사용됨, 뒤로가기 버튼을 눌렀을 때 백 스택의 상단에 있는 현재 목적지를 삭제하고 이전 목적지로 돌아가게 됨
상단의 뒤로가기 버튼은 화면 상단의 앱 바에 나타남, 앱의 태스크 내에서 이 버튼은 시스템 네비게이션 바의 뒤로가기 버튼과 동일하게 동작함
상단의 뒤로가기 버튼은 앱을 종료하지 않아야 하므로 사용자가 시작 목적지에 있다면 상단에 뒤로가기 버튼이 나타나지 않게 함, 이와 다르게 시스템 네비게이션 바에 있는 뒤로가기 버튼은 시작 목적지와 상관없이 나타나고 앱을 종료할 수 있음
만약 앱이 다른 앱의 태스크에서 딥 링크를 사용해 켜졌다면 상단의 뒤로가기 버튼은 시뮬레이션된 백 스택을 통해 현재 앱의 태스크 내에서 이동하고 원래 앱으로 돌아가지 않음, 하지만 시스템 네비게이션 바에 있는 뒤로가기 버튼은 원래의 앱으로 돌려보내줌
딥 링크를 사용하거나 수동으로 탐색하거나에 상관 없이 상단의 뒤로가기 버튼을 사용해 특정 목적지에서 목적지들을 통해 시작 목적지로 되돌아올 수 있음
앱의 태스크내에서 딥 링크를 통해 목적지로 진입하면 앱의 태스크에 존재하던 백 스택은 제거되고 딥 링크에 사용된 백 스택으로 교체됨
이를 다시 Sunflower 앱을 예시로 들면, 사용자가 이전에 런처에서 앱을 실행해 사과를 위한 세부 화면으로 탐색했다고 가정하면, 최근 항목 화면에서 앱이 사과의 상세 화면을 가장 상단으로 가지고 있는 태스크가 존재한다는 것을 알 수 있음

그림 3. 사용자가 Sunflower 앱을 탐색했을 때의 과정과 결과로 나오는 백 스택

그림 4. 딥 링크를 통해 Sunflower 의 기존에 존재하던 백 스택이 교체됨
이 때 백 스택이 아보카도 세부 화면이 가장 위에 있는 만들어진(synthetic) 백 스택으로 교체된 것을 알 수 있고 시작 목적지도 백 스택에 추가되어 있는 것을 알 수 있음, 원래 존재했던 백 스택은 사용자가 사과 세부 정보 화면에 있었다는 사실과 함께 사라짐, 만들어진 백 스택이 앱을 자연스럽게 탐색하는 백 스택과 일치해야 하므로 이 모든 단계는 만들어진 백 스택이 사실적이기 위해 반드시 필요한 단계임
이를 만족하기 위해서 만들어진 백 스택은 앱의 NavGraph 를 기반으로 만들어짐, 중첩이 없는 간단한 NavGraph 라면 백 스택은 시작 목적지와 딥 링크의 목적지만 포함함, 중첩된 그래프의 경우 만들어진 백 스택은 딥 링크 목적지의 상위 목적지들이 가지고 있는 시작 목적지도 포함사게 됨
네비게이션 컴포넌트는 딥 링크 기능을 지원하고 이를 통해 앱의 어느 목적지로 들어가도 그 목적지를 위한 사실적인 백 스택을 만들 수 있음
원문: https://developer.android.com/guide/navigation/principles