• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Back 탐색과 Up 탐색
2page.tags="navigation","activity","task","up navigation","back navigation"
3page.image=/design/media/navigation_between_siblings_gmail.png
4@jd:body
5
6<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
7  <div>
8    <h3>개발자 문서</h3>
9    <p>효과적인 탐색 구현</p>
10  </div>
11</a>
12
13<p itemprop="description">일관적인 탐색 기능은 전반적인 사용자 환경에 필수적인 요소입니다. 일관성 없고 예상대로 진행되지 않는 기본 탐색은
14사용자에게 많은 실망을 줍니다. Android 3.0에서는
15글로벌 탐색 동작에 중요한 변경 사항을 도입했습니다. Back 및 Up 탐색에 대한
16가이드라인을 꼼꼼히 따르면 사용자가 예상 가능하고 신뢰할 수 있는 탐색 기능이 탑재된 앱을 만들 수 있습니다.</p>
17<p>Android 2.3 이하 버전에서는 앱 내 탐색 기능을 지원하기 위해 시스템의 <em>Back</em> 버튼에
18의존했습니다. Android 3.0에서는 작업 모음을 도입함으로써 앱 아이콘 및 왼쪽 방향 캐럿으로 이루어진
192차 탐색 메커니즘인<em>Up</em> 버튼이 추가되었습니다.</p>
20
21<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
22
23<h2 id="up-vs-back">Up과 Back</h2>
24
25<p>Up 버튼은 화면
26간의 계층적 관계를 기반으로 앱 내에서 탐색할 때 사용됩니다. 예를 들어, 화면 A에 표시된 항목 목록에서 항목을 선택하면 항목에 대한 세부 정보를 표시하는 화면 B로 이동하게 되는데, 이때
27화면 B는 화면 A로
28돌아가는 Up 버튼을 제공해야 합니다.</p>
29<p>화면이 앱의 최상단에 있는 경우(즉, 앱의 홈인 경우), Up
30버튼이 표시되지 않아야 합니다.</p>
31
32<p>시스템의 Back 버튼은 사용자가 최근에 작업한 화면
33기록을 역순으로 탐색할 때 사용됩니다. 일반적으로 이 버튼은 앱의 계층 구조가 아닌 화면
34간의 일시적인 관계를 기반으로 합니다.</p>
35
36<p>또한, 앞서 본 화면이 현재 화면의 계층적 상위 화면일 경우
37Back 버튼을 누르는 것과 Up 버튼을 누르는 것의 결과가 동일하며, 이는 흔하게
38발생하는 동작입니다. 하지만 사용자가 앱 내에 머무는 Up 버튼과 달리, Back
39버튼을 누르면 홈 화면 또는 다른 앱으로 돌아갈 수 있습니다.</p>
40
41<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
42
43<p>Back 버튼은 화면 간 탐색과 직접적으로 관련 없는 몇 가지 동작도 지원합니다.
44</p>
45<ul>
46<li>부동 창 해제(대화 상자, 팝업)</li>
47<li>상황에 맞는 작업 모음 해제 및 선택한 항목에서 강조 표시 제거</li>
48<li>화상 키보드(IME) 감추기</li>
49</ul>
50<h2 id="within-app">앱 내 탐색</h2>
51
52<h4>여러 진입 지점을 통한 화면 탐색</h4>
53<p>일부 화면은 앱의 계층 구조 내에서 엄격한 위치를 가지고 있지 않는 경우가 있으며, 이 경우 여러 진입 지점을
54통해서 접근할 수 있습니다. 예를 들어 설정 화면은 앱
55내의 다른 어떤 화면에서도 접근이 가능합니다. 이러한 경우, Up 버튼을 누르면 Back 버튼과 동일하게
56참조하는 화면으로 돌아가게 됩니다.</p>
57<h4>화면 내에서 뷰 변경</h4>
58<p>화면의 뷰 옵션 변경은 Up 또는 Back 버튼의 동작을 변경하지 않습니다. 이는 화면이 앱 계층 구조 내에서 여전히 동일한 위치에
59있고, 어떠한 탐색 기록도 새로 생성되지 않기 때문입니다.</p>
60<p>이러한 뷰 변경의 예는 다음과 같습니다.</p>
61<ul>
62<li>탭 및/또는 좌우 스와이프를 사용하여 뷰 전환하기</li>
63<li>드롭다운(겹쳐진 탭이라고도 함)을 사용하여 뷰 전환하기</li>
64<li>목록 필터링하기</li>
65<li>목록 정렬하기</li>
66<li>표시 문자 변경하기(예: 확대/축소)</li>
67</ul>
68<h4>형제 화면 간 탐색하기</h4>
69<p>항목 목록에서 개별 항목의 상세 뷰로의 이동을 앱에서 지원하는 경우, 해당 항목에서 목록의 이전/이후
70항목으로 직접 이동할 수 있도록 지원하는 것이 바람직한
71경우도 있습니다. 예를 들어 Gmail의 대화에서 왼쪽 또는 오른쪽으로 간단하게 스와이프하여 동일한 받은 편지함에 있는 신규 또는 이전 메일을
72볼 수 있습니다. 화면 내에서 뷰를 변경하는 것과 마찬가지로,
73탐색은 Up 또는 Back 버튼의 동작을 바꾸지 않습니다.</p>
74
75<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
76
77<p>하지만 참조 목록으로 같이
78묶여 있지 않은 연관된 상세 뷰 사이를 탐색할 때는 주목할 만한 예외적인 상황이 발생합니다. 예를 들어, Play Store에서
79동일한 개발자가 만든 여러 앱 또는 동일한 아티스트의 여러 앨범을 탐색하는 경우가 그렇습니다. 이러한 경우, 링크를 따라갈 때마다
80기록이 생성되므로, Back 버튼을 누르면 이전에 본 화면으로 이동합니다. Up 버튼을 누르면 계속해서 이러한 연관된 화면을
81거치지 않고 가장 최근에 본 컨테이너 화면으로 이동합니다.</p>
82
83<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
84
85<p>상세
86뷰에 대한 지식을 바탕으로 더욱 스마트한 Up 버튼 동작을 구현할 수 있습니다. 위에서 설명한 Play Store 예를 확장하여 사용자가
87마지막으로 본 도서에서 해당 도서를 각색한 영화의 세부 정보 화면으로 이동했다고 가정해 봅니다. 그러한 경우, Up 버튼을 누르면 사용자가 이전에 탐색한 적이 없는
88컨테이너(영화)로 이동할 수 있습니다.</p>
89
90<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
91
92<h2 id="into-your-app">홈 화면 위젯 및 알림을 통한 앱 탐색</h2>
93
94<p>홈 화면 위젯이나 알림을 사용하여 사용자가 앱 계층 구조 내에
95있는 화면으로 바로 이동할 수 있게 할 수 있습니다. 예를 들어, Gmail의 받은 편지함 위젯과 새 메시지 알림은
96모두 받은 편지함 화면을 건너뛰고 사용자가 해당 메일로 바로 이동할 수 있게 해줍니다.</p>
97
98<p>이러한 두 경우 모두 Up 버튼을 다음과 같이 처리합니다.</p>
99
100<ul>
101<li><em>일반적으로 목적지 화면이
102앱 내의 특정 화면에서 출발한 경우</em>, Up 버튼은 해당 화면으로 이동해야 합니다.</li>
103<li><em>그 외의 경우</em>, Up 버튼은 앱의 최상위("홈") 화면으로 이동해야 합니다.</li>
104</ul>
105
106<p>Back 버튼의 경우,
107앱의 최상위 화면으로 이동하는 완전한 상위 탐색 경로를 태스크의 백 스택에 삽입하여 탐색을 더욱 예측 가능하게 만들어야 합니다. 이는 앱에 어떻게 진입했는지 잊어버린
108사용자가 앱에서 나가기
109전에 앱의 최상위 화면으로 이동할 수 있게 해줍니다.</p>
110
111<p>예를 들어 Gmail의 홈 화면 위젯은 메일 작성
112화면으로 바로 진입할 수 있는 버튼을 제공합니다. 메일 작성 화면에서 Up 또는
113Back 버튼을 누르면 받은 편지함으로 이동하게 되고, 받은 편지함에서 Back 버튼을 누르면 홈으로 돌아가게 됩니다.</p>
114
115<img src="{@docRoot}design/media/navigation_from_outside_back.png">
116
117<h4>간접 알림</h4>
118
119<p>앱이 동시에 다양한 이벤트 정보를 제공해야 하는 경우, 사용자를 틈새 화면(interstitial screen)으로 이동하게 하는
120단일 알림을 사용할 수 있습니다. 이 화면은
121이러한 이벤트를 요약하고, 사용자가 앱을 세부적으로 탐색할 수 있는 경로를 제공합니다. 이러한 스타일의 알림을
122<em>간접 알림</em>이라고 합니다.</p>
123
124<p>기본(직접) 알림과 달리, 간접 알림의
125틈새 화면에서 Back 버튼을 누르면 백 스택에 다른 화면이
126추가되지 않고 알림이 트리거된 지점으로 사용자를 이동시킵니다. 사용자가
127틈새 화면에서 앱으로 들어가면, Up 버튼 및 Back 버튼은 위에서 설명한 바와 같이 틈새 화면으로 돌아가지 않고, 기본 알림과 마찬가지로 앱 내에서
128탐색을 수행합니다.</p>
129
130<p>예를 들어 Gmail을 사용 중인 사용자가 캘린더로부터 간접 알림을 받았다고 가정해 봅니다. 해당
131알림을 터치하면 틈새 화면이 열립니다. 이 화면에는 다른
132여러 이벤트에 대한 알림도 표시됩니다. 틈새 화면에서 Back 버튼을 터치하면 Gmail로 돌아갑니다. 특정
133이벤트를 터치하면 사용자를 틈새 화면에서 나오게 하여
134해당 이벤트의 세부 정보를 보여주는 완전한 캘린더 앱으로 이동하게 됩니다. 이벤트 세부 정보 화면에서 Up 버튼과 Back 버튼을 누르면 캘린더의 최상위 뷰로 이동하게 됩니다.</p>
135
136<img src="{@docRoot}design/media/navigation_indirect_notification.png">
137
138<h4>팝업 알림</h4>
139
140<p><em>팝업 알림</em>은 알림 창을 거치지 않고 바로 사용자에게
141표시되는 알림입니다. <strong>팝업 알림은 시기적절한
142응답이 요구되는 경우와 사용자의 컨텍스트를 중단하는 것이 필요한 경우에 한하여</strong> 드물게 사용됩니다. 예를 들어
143Talk는 친구가 화상 채팅에 참여하도록 보낸
144초대를 사용자에게 알리기 위해 이러한 스타일의 알림을 사용하며, 이 초대는 몇 초 후에 자동으로 만료됩니다.</p>
145
146<p>탐색 동작 측면에서, 팝업 알림은 간접
147알림의 틈새 화면 동작을 상당히 많이 따릅니다. Back 버튼을 누르면 팝업 알림이 해제됩니다. 사용자가 팝업을
148통해 앱으로 이동하면, Up 및 Back 버튼은 기본 알림의 규칙에 따라 앱 내에서
149탐색합니다.</p>
150
151<img src="{@docRoot}design/media/navigation_popup_notification.png">
152
153<h2 id="between-apps">앱 간 탐색</h2>
154
155<p>Android 시스템의 본질적인 강점 중 하나는 앱이
156다른 앱을 실행할 수 있다는 점이며, 이로 인해 사용자는 한 앱에서 다른 앱으로 직접 이동할 수 있습니다. 예를 들어,
157사진을 캡처해야 하는 앱은 카메라 앱을 작동시킬 수 있으며, 카메라 앱은 사진을
158해당 앱으로 돌려줍니다. 이러한 기능은 개발자와 사용자 모두에게 매우 유용합니다.
159왜냐하면 개발자는 쉽게 다른 앱의 코드를 활용할 수 있고, 사용자는 흔히 수행하는 작업을 일관된 환경으로
160즐길 수 있기 때문입니다.</p>
161
162<p>앱 간 탐색을 이해하려면 아래에서
163설명하는 Android 프레임워크 동작을 알아야 합니다.</p>
164
165<h4>액티비티, 태스크 및 인텐트</h4>
166
167<p>Android에서 <strong>액티비티</strong>는
168정보 및 사용자가 수행할 수 있는 모든 관련 작업이 포함된 화면을 정의하는 애플리케이션 구성 요소입니다. 앱은 본인이 직접 생성하는
169액티비티와 다른 앱에서 재활용하는 액티비티로 구성되어 있는 액티비티 컬렉션입니다.</p>
170
171<p><strong>태스크</strong>는 사용자가 목적을 달성하기 위해서 따르는 일련의 액티비티입니다. 단일
172태스크는 단 한 가지 앱의 액티비티만 사용할 수도 있고,
173여러 앱의 액티비티를 사용할 수도 있습니다.</p>
174
175<p><strong>인텐트</strong>는 어떤 앱이 작업을 수행하는 데 다른
176앱의 도움을 받고자 한다는 신호를 보내는 메커니즘입니다. 앱의 액티비티는
177어떠한 인텐트에 응답을 보낼 수 있는지 알려줄 수 있습니다. "공유하기"와 같이 일반적인 인텐트의 경우, 사용자는 해당 요청을 수행할 수 있는 여러 앱을
178설치했을 수도 있습니다.</p>
179
180<h4>예: "공유하기"를 지원하는 앱 간에 탐색하기</h4>
181
182<p>액티비티, 태스크, 인텐트가 어떻게 같이 동작하는지 이해하려면 앱이 어떻게 사용자가 다른 앱을 사용하여 콘텐츠를
183공유할 수 있도록 하는지 생각해 보세요. 예를 들어, 홈에서 Play 스토어 앱을 실행하면 새로운 태스크
184A가 시작됩니다(아래 그림 참조). Play 스토어에서 탐색하다가 홍보 도서의 세부 정보를
185보기 위해 터치하면, 다른 액티비티를 추가하여 태스크를 연장하는 방식으로 사용자는 동일한 태스크에 머물게 됩니다. 공유하기
186작업을 트리거하면 공유하기 인텐트를 처리하도록
187등록된 액티비티(다양한 앱에서 제공)가 나열된 목록을 보여주는 대화 상자가 표시됩니다.</p>
188
189<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
190
191<p>사용자가 Gmail을 통해 공유하기를 선택할 경우, 새로운 태스크가 생성되는 것이 아니라
192태스크 A의 연장으로 Gmail의 메일 작성 액티비티가 추가됩니다. Gmail의 백그라운드에서 실행되는 자체적인 태스크가 있을 경우, 해당 태스크는 아무런
193영향도 받지 않습니다.</p>
194
195<p>메일 작성 액티비티에서 메시지를 보내거나 Back 버튼을 터치하면, 사용자는
196도서 세부 정보 액티비티로 돌아가게 됩니다. Back 버튼을 연이어 터치하면 Play
197Store에서 탐색한 페이지로 되돌아가게 되어 결국에는 홈 화면에 이르게 됩니다.</p>
198
199<img src="{@docRoot}design/media/navigation_between_apps_back.png">
200
201<p>하지만 사용자가 메일 작성 액티비티에서 Up 버튼을 터치하는 것은
202Gmail에 남아 있고자 하는 의지를 보이는 것입니다. 따라서, 이 경우 Gmail의 대화 목록 액티비티가 표시되고, 새로운 태스크 B가 생성됩니다. 새로운 태스크는
203항상 홈에 기반을 두고 있기 때문에, 대화 목록에서 Back 버튼을 터치하면 홈으로 되돌아가게 됩니다.</p>
204
205<img src="{@docRoot}design/media/navigation_between_apps_up.png">
206
207<p>태스크 A는 백그라운드에 남아 있기 때문에 나중에 돌아올 수 있습니다(예를 들어,
208최근 앱 화면을 통해). Gmail에 이미 백그라운드에서 실행 중인 자체적인 태스크가 있을 경우,
209해당 태스크는 태스크 B로 대체됩니다. 이전 컨텍스트는 사용자의 새로운 목적에 따라 제거됩니다.</p>
210
211<p>앱 계층 구조 내의 액티비티에서 인텐트를 처리하도록 앱에서 등록하는 경우, Up 탐색을 지정하는 방법에 대한 지침을 확인하려면
212<a href="#into-your-app">홈 화면 위젯 및
213알림을 통한 앱 탐색</a>을 참조하세요.</p>
214