Jetpack Compose: 접근성 포커스와 키보드 포커스의 차이점 및 제어 방법
🤖 AI 추천
이 콘텐츠는 Jetpack Compose를 사용하여 안드로이드 앱을 개발하는 주니어 및 미들 레벨 개발자에게 특히 유용합니다. 접근성 기능을 고려한 UI 개발에 관심이 있거나, `focusRequester`와 같은 포커스 관리 API에 대한 이해를 높이고자 하는 개발자에게 추천합니다.
🔖 주요 키워드

핵심 기술
본 글은 Jetpack Compose에서 안드로이드 접근성(스크린 리더, TalkBack 등) 포커스와 키보드 포커스가 다르게 동작하는 이유를 설명하고, 각 상황에 맞는 포커스 제어 방법을 제시합니다.
기술적 세부사항
- 접근성 포커스 vs. 키보드 포커스:
- 접근성 포커스: 스크린 리더 사용 시 UI 요소에 설정되는 포커스. 시스템이 관리하며 개발자가 직접 수정할 필요 없음.
- 키보드 포커스: 키보드 또는 유사 장치로 네비게이션할 때 인터랙티브 요소에 설정되는 포커스. 기본적으로 시각적인 표시가 적음.
- 포커스 가능한 요소: 터치 입력으로 상호작용 가능한 모든 컴포넌트(버튼, 체크박스, 스와이프 가능한 요소, 그래프 등)는 포커스 가능해야 함.
- 포커스 가능하게 만드는 방법:
clickable
,toggleable
,selectable
modifier 사용: 클릭, 토글, 선택 가능한 컴포넌트에 적합.focusable
modifier 사용: 클릭/토글/선택은 아니지만 키보드 단축키 등 사용자 상호작용이 필요한 컴포넌트에 사용.
- 프로그래밍 방식 포커스 이동:
- 키보드 포커스:
FocusRequester
를 사용하여 원하는 요소로 포커스 이동 가능. Modifier 순서(focusRequester
가 포커스 가능 modifier보다 먼저 와야 함)가 중요. - 접근성 포커스:
focusRequester
는 작동하지 않음.semantics
modifier의focused
속성 변경 또는LaunchedEffect
를 활용한 상태 관리를 통해 우회 구현.
- 키보드 포커스:
- 포커스 순서 변경:
- 접근성 포커스: 부모 컴포넌트에
semantics { isTraversalGroup = true }
를 설정하고, 자식 요소들에traversalIndex
를 지정하여 순서 제어.
- 접근성 포커스: 부모 컴포넌트에
📚 관련 자료
android-samples
Google에서 제공하는 Jetpack Compose 샘플 코드 저장소로, 다양한 UI 패턴과 기능 구현 예시를 포함하고 있어 포커스 관리 및 접근성 관련 기능을 학습하고 탐색하는 데 매우 유용합니다.
관련도: 95%
android-accessibility-samples
안드로이드 접근성 기능을 구현하는 다양한 샘플을 제공하는 저장소입니다. 스크린 리더, 스위치 액세스 등 접근성 관련 포커스 동작 및 제어 방법에 대한 실제적인 코드를 참고할 수 있습니다.
관련도: 90%
ios-compose-samples
이 저장소는 직접적인 관련성은 낮으나, 크로스 플랫폼 개발 관점에서 Compose의 활용 가능성을 보여주며, 다른 플랫폼의 접근성 및 UI/UX 처리 방식과 비교하며 Jetpack Compose의 접근성 기능을 이해하는 데 간접적인 도움이 될 수 있습니다.
관련도: 40%