이전(Back) 및 상위(Up) 탐색

전반적인 사용자 경험에 있어 일관된 탐색은 필수 요소라 할 수 있습니다. 기본 탐색과 비교해 모순되고 예상할 수 없는 방향으로 탐색이 동작할 경우 사용자는 불만을 느낄 것입니다. 안드로이드 3.0에서 전체적인 탐색 동작에 있어서 커다란 변화를 소개했는데요. 계속해서 이어지는 이전(Back) 및 상위(Up)에 대한 가이드라인을 주의 깊게 따른다면 여러분의 앱은 사용자가 예측 가능하고 믿을 수 있는 탐색을 수행하게 도울 수 있을 것입니다.

안드로이드 2.3 및 이전 버전은 앱 내의 탐색 지원에 시스템 이전 버튼에 의존하고 있었습니다. 안드로이드 3.0에서 액션 바와 함께 두번째 탐색 방식을 소개했습니다: 바로 앱 아이콘과 왼쪽을 가리키는 표시로 이루어져 있는 상위 버튼입니다.

상위 vs. 이전

상위 버튼은 애플리케이션 내에서 화면 간 계층 의존적 탐색에 사용합니다. 예를 들어 화면 A가 항목 리스트를 표시하고 있을 때 항목을 선택하면 (선택한 항목에 대해 더 자세한 내역이 표시되는) 화면 B로 이동하게 되며, 화면 B는 화면 A로 돌아갈 수 있도록 상위 버튼을 제공해야 할 것입니다.

현재 화면이 앱 최상위인 경우에는(즉 앱의 홈이라면) 상위 버튼을 표시해선 안됩니다.

시스템 이전 키는 사용자가 최근에 본 화면 기록을 기초로 시간 역순—사실 상 화면 간 시간 의존적—으로 탐색하는데 사용합니다.

이전에 봤던 화면이 현재 화면의 계층적 부모이기도 하다면 이전 키를 누르는 것은 상위 버튼을 누르는 것과 동일한 결과를 낼 것입니다—이것은 흔한 일입니다. 하지만 사용자가 앱 내에 남아 있는 것을 보증하는 상위 버튼과는 달리, 이전 키는 사용자를 홈 화면이나 다른 애플리케이션으로 이동시킬 수 있습니다.

이전 키는 또한 화면과 화면 간 탐색에 직접적으로 영향을 주지 않는 몇가지 동작을 지원합니다:

  • 이전 키는 떠 있는 윈도우(대화상자, 팝업)를 닫습니다.
  • 이전 키는 컨텍스트 액션 바와 선택된 항목 표시를 지웁니다.
  • 이전 키는 온스크린 키보드(IME)를 감춥니다.

앱 내 탐색

여러 진입점을 통한 화면 이동

간혹 어떤 화면은 앱 계층 구조 내에서 엄격한 위치가 정해져 있지 않아서 다양한 진입점을 통해 도달할 수 있습니다—예를 들어 설정 화면은 앱 내 어떤 화면에서든지 실행될 수 있습니다. 이 경우 상위 버튼은 이전 버튼과 동일하게 자신을 호출했던 화면을 선택해 돌아가도록 합니다.

화면 내의 뷰 변경

화면 내에서 뷰 옵션을 변경했을 경우 상위 혹은 이전 키의 동작을 변경하지 않습니다: 화면은 여전히 앱 계층 내 동일한 곳에 있으며 새로운 탐색 기록이 만들어지지 않았기 때문입니다.

이와 비슷한 뷰 변경의 예제를 살펴보자면:

  • 탭을 사용하거나 좌우 스와이프로 뷰를 전환하는 경우
  • 드롭다운(접힌 탭으로도 알려진)을 사용해 뷰를 전환하는 경우
  • 리스트 필터링
  • 리스트 정렬
  • 디스플레이 스타일 변경(확대 등)

동일 계층 화면 간 탐색

앱이 항목 리스트를 표시한 후 그 중 한 항목의 상세 뷰를 표시하는 방식의 탐색을 한다면 현재 항목에서 리스트 이전 및 다음 항목으로 이동하는 기능을 지원하는 것은 가치 있는 일입니다. 예를 들어 Gmail에서는 동일한 받은 편지함의 대화 내역 내에서 좌나 우로 스와이프해 신규 및 이전 내역을 쉽게 볼 수 있습니다. 화면 내의 뷰를 변경할 때와 동일하게 이러한 탐색은 상위 혹은 이전 버튼의 동작을 변경하지 않습니다.

그러나 주목할만한 예외가 "관련된" 상세 뷰를 열람할 때와 같은 경우—예를 들어 Google Play에서 같은 개발자의 다른 앱들을 열람하는 경우, 혹은 같은 아티스트의 다른 앨범들을 열람하는 경우—에 발생할 수 있습니다. 이와 같은 경우에는 각 링크를 따라갈 때 기록을 남겨둠으로, 이전 버튼을 누르면 본 적이 있는 각 연관된 컨텐츠로 이동할 수 있습니다. 상위 버튼은 이전과 마찬가지로 이러한 관련 화면들은 무시하고 가장 최근에 봤던 컨테이너 화면으로 이동해야 합니다.

상세 뷰의 정보량에 따라 상위 버튼이 더 깔끔하게 동작하게 할 수도 있습니다. 위에 언급된 Google Play 예제를 확장해, 사용자가 도서를 살펴 본 후에 해당 도서를 각색한 영화 내역을 열람했다고 가정해봅시다. 이 경우 상위 버튼은 사용자가 이전에 열람한 적이 없었다 해도 컨테이너(영화)로 돌아가게 할 수 있습니다.

홈 화면 위젯과 알림에서 앱으로 들어오는 탐색

사용자가 홈 화면 위젯이나 알림에서 앱 계층 깊숙히 곧바로 탐색할 수 있도록 할 수 있습니다. 예를 들어 Gmail의 받은 편지함 위젯과 새 메일 알림 모두 받은 편지함 화면을 건너 뛰고 곧바로 대화 뷰로 진입합니다.

이러한 경우에는 상위 버튼을 다음과 같이 처리하세요:

  • 대상 화면이 일반적으로 특정한 한 화면에서 불리는 경우라면, 상위 버튼을 누르면 그 화면으로 이동해야 합니다.
  • 그 외의 경우에는, 상위 버튼을 누르면 앱의 최상위("홈") 화면으로 이동해야 합니다.

이전 버튼을 누르는 경우에는, 작업 백스택(back stack)에 앱의 최상위 화면까지 상위로 이동해 갈 수 있게끔 충분히 예측할 수 있는 이동 경로를 삽입해야 합니다. 이러한 처리는 어떻게 앱에 진입했는지 잊어버린 사용자가 앱을 빠져나가기 전에 앱 최상위 화면을 열람할 수 있게 할 것입니다.

예를 들어 Gmail의 홈 화면 위젯은 편지 쓰기 화면으로 바로 들어가는 버튼을 가지고 있습니다. 편지 쓰기 화면에서 상위나 이전 버튼을 누르면 먼저 받은 편지함으로 돌아가고, 받은 편지함에서 이전 버튼을 누르면 홈으로 돌아갑니다.

간접 알림(Indirect Notifications)

다양한 이벤트 정보를 동시에 표시할 필요가 있다면 한가지 알림만 표시해 틈새 화면(interstitial screen)으로 이동하도록 할 수 있습니다. 이 화면에서는 이러한 이벤트들을 요약하고, 앱 깊숙히 이동할 수 있는 경로를 제공합니다. 이러한 스타일의 알림은 간접 알림이라고 부릅니다.

표준(직접) 알림과 달리 간접 알림의 틈새 화면에서 이전 버튼을 누르면—백 스택에 다른 화면이 추가되지 않고—알림이 호출되었던 시점으로 돌아갑니다. 일단 틈새 화면에서 사용자가 앱 속으로 진입하면, 상위 및 이전 버튼은 위에 설명한 표준 알림과 같은 방식으로, 즉 틈새 화면으로 돌아가지 않고 앱 내를 탐색합니다.

예를 들어 Gmail을 사용 중일 때 캘린더의 간접 알림을 받았다고 가정해보겠습니다. 이 알림을 터치하면 여러 다른 종류의 이벤트 알림이 담긴 틈새 화면이 열립니다. 틈새 화면에서 이전 버튼을 누르면 Gmail로 돌아갑니다. 특정 이벤트를 누르면 틈새 화면에서 벗어나 캘린더 앱으로 본격적으로 들어가 상세 이벤트 정보를 볼 수 있게 됩니다. 상세 이벤트 내역에서 상위 및 이전 버튼을 누르면 캘린더의 최상위 레벨로 이동하게 됩니다.

팝업 알림

팝업 알림은 알림 서랍에 들어가지 않고 곧바로 사용자 앞에 나타납니다. 적시에 응답하는 것이 꼭 필요한 경우 및 사용자를 방해하는 것이 불가피한 경우 등에 드물게 사용합니다. 예를 들어, 토크는 영상채팅 초대를 받았음을 통보하기 위해 이 스타일을 사용하며 몇 초 후에 이 초대를 자동으로 파기합니다.

팝업 알림의 탐색 방식은 간접 알림의 틈새 화면에서 사용하는 탐색 방식과 상당히 비슷합니다. 이전 버튼은 팝업 알림을 없앱니다. 사용자가 팝업을 통해 알림 중인 앱 속으로 들어가면 상위 및 이전 버튼은 표준 알림으로 앱 내를 탐색할 경우와 동일한 방식으로 동작합니다.

앱에서 앱으로 이어지는 탐색

안드로이드 시스템의 핵심적인 강점 중 하나는 앱이 다른 앱을 실행해 사용자가 하나의 앱에서 다른 앱 깊숙히 탐색할 수 있게 하는 기능입니다. 예를 들어 사진을 찍어야 하는 앱이 카메라 앱을 실행하면 카메라 앱은 자신을 호출했던 앱으로 사진을 되돌려줍니다. 개발자는 다른 앱의 기능을 쉽게 끌어오고 사용자는 자주 사용하는 동작을 일관된 경험으로 사용할 수 있기 때문에 이 기능은 개발자와 사용자 양 쪽에 크나큰 이득을 줍니다.

앱에서 앱으로 이어지는 탐색을 이해하기 위해, 먼저 아래에 설명하는 안드로이드 프레임워크 특성에 대해 이해하는 것이 중요합니다.

액티비티, 태스크, 인텐트

안드로이드에서, 액티비티(activity)는 정보 화면을 정의하는 애플리케이션 구성 요소 및 사용자가 수행할 수 있는 모든 연관된 동작을 의미합니다. 앱은 여러분이 만든 액티비티 및 다른 앱에서 재사용될 액티비티를 포함한 액티비티 모음이라고 할 수 있습니다.

태스크(task)는 사용자가 어떤 목적을 달성하기 위해 거치는 일련의 액티비티입니다. 하나의 태스크는 오직 한 앱의 액티비티만 활용할 수도 있지만, 여러 앱의 액티비티에서 결과를 받아올 수도 있습니다.

인텐트(intent)는 한 앱에서 특정 액션을 수행할 때 다른 앱에게 도움을 받고 싶다는 신호를 날리는 메커니즘입니다. 앱 액티비티는 어떤 인텐트에 응답할 수 있는지 인지할 수 있습니다. "공유"와 같은 일반적인 인텐트를 사용하는 사용자는 필요에 따라 다양한 앱을 설치해두었을 것입니다.

예제: 공유 기능 사용시의 앱 간 탐색

액티비티, 태스크, 인텐트가 어떻게 동작하는지 이해하기 위해, 한 앱이 다른 앱을 사용해 어떻게 컨텐츠를 공유하는지 생각해보겠습니다. 예를 들어 홈에서 Play 스토어 앱을 실행하면 태스크 A가 시작됩니다(아래 도표를 보세요). Play 스토어로 탐색한 후 상세 정보를 보기 위해 홍보중인 도서를 터치하면 사용자는 같은 태스크에 남아 있는 상태에서 액티비티를 추가해 태스크를 확장한 것입니다. 공유 액션을 선택하면 공유 인텐트를 처리할 수 있다고 등록되어 있는 (다양한 앱의) 액티비티 목록이 담긴 대화 상자가 나타납니다.

사용자가 Gmail로 공유하겠다고 결정하면 Gmail의 편지 쓰기 액티비티가 태스크 A에 이어져—새 태스크가 생성되지 않고—추가됩니다. 이 태스크는 백그라운드에 Gmail 자신의 태스크가 동작하고 있었어도 영향을 받지 않습니다.

편지 쓰기 액티비티에서 메시지를 보내거나 이전 버튼을 누르면 사용자는 도서 상세 보기 액티비티로 돌아옵니다. 이전 버튼을 계속해서 누르면 Play 스토어의 이전 화면으로 계속 넘어가 결국 홈 화면에 도착하게 됩니다.

하지만 사용자가 편지 쓰기 화면에서 상위 버튼을 터치했다면, Gmail에 남아 있길 원한다는 걸 알 수 있습니다. Gmail의 대화 목록 액티비티가 나타나고 새로운 태스크 B가 생성됩니다. 새 태스크는 언제나 홈으로 이어지며, 따라서 대화 목록에서 이전 버튼을 누르면 홈으로 돌아가게 됩니다.

백그라운드에 태스크 A가 남아 있기 때문에, 사용자는 나중에 (예를 들어 최근 앱 화면을 통해) 해당 태스크로 돌아갈 수 있습니다. 만약 이미 백그라운드에 Gmail 고유 작업이 진행 중이었다면, 이 작업은 태스크 B—이전 상황은 사용자의 새 목표에 따라 버려짐—로 교체될 수 있습니다.

여러분의 앱이 앱 계층 내의 액티비티가 인텐트를 처리할 경우 상위 탐색을 어떻게 처리해야 할 지에 대해서는 홈 화면 위젯과 알림에서 앱으로 들어오는 탐색을 참조해주세요.