Navigation Event는 시스템 수준 탐색 이벤트를 애플리케이션에 통합하기 위한 Kotlin 멀티플랫폼 (KMP) 솔루션을 제공하는 라이브러리입니다. 이 레이어는 다양한 지원 플랫폼에서 탐색 방향을 처리하는 기본 레이어로 설계되었습니다.
주요 개념
탐색 이벤트 시스템은 중앙 집중식 디스패처-핸들러 모델을 기반으로 빌드되며, 부모-자식 계층 구조에서 자주 사용되어 Jetpack Compose에서 볼 수 있는 복잡한 UI 구조에 매핑됩니다.
NavigationEventDispatcher
NavigationEventDispatcher는 등록된 모든 탐색 이벤트 소비자(NavigationEventHandler)를 관리하고 이벤트 흐름을 오케스트레이션하는 중앙 클래스입니다.
계층적 설정에서 동일한 체인 내의 모든 디스패처는 단일 NavigationEventProcessor를 공유합니다. 이 NavigationEventProcessor는 전역 상태를 관리하고 전체 트리에서 단일의 통합된 디스패치 순서를 보장합니다.
NavigationEventHandler
NavigationEventHandler는 NavigationEventDispatcher에서 전달된 탐색 이벤트를 수신하고 처리하는 추상 클래스입니다. 동작이 시작, 진행, 완료 또는 취소되는 등 탐색 동작 수명 주기의 다양한 단계에 해당하는 콜백 메서드를 정의합니다.
핸들러는 이러한 이벤트에 응답하여 사용자 탐색 작업에 따라 UI 또는 애플리케이션 상태를 업데이트할 수 있습니다. 여러 핸들러를 디스패처에 등록할 수 있으며 우선순위와 등록 순서에 따라 호출됩니다.
NavigationEvent
NavigationEvent는 탐색 동작의 세부정보를 전달하는 데이터 클래스입니다.
NavigationEventInfo
NavigationEventInfo는 탐색 상태에 관한 컨텍스트 정보를 제공하는 추상 클래스입니다.
NavigationEventInput
NavigationEventInput는 탐색 이벤트를 생성하고 디스패치하는 구성요소의 추상 클래스입니다. 탐색 시스템의 '입력' 측면 역할을 하며 플랫폼별 이벤트 (예: 시스템 뒤로 동작 또는 버튼 클릭)를 NavigationEventDispatcher에 전송할 수 있는 표준화된 이벤트로 변환합니다.
지원되는 탐색 방향 및 트리거
탐색 이벤트 시스템은 시스템 뒤로 버튼뿐만 아니라 여러 플랫폼에서 여러 탐색 방향과 입력 방법을 지원하는 설계를 포함하도록 설계되었습니다.
지원되는 방향
플랫폼마다 지원하는 탐색 방향이 다릅니다.
플랫폼 |
뒤로 |
위쪽 |
전달 |
홈 |
Android 휴대전화 |
✅ |
✅ |
🚫 |
✅ |
Android 태블릿 |
✅ |
✅ |
🚫 |
✅ |
웹 (브라우저) |
✅ |
✅ |
✅ |
🚫 |
iOS (iPhone/iPad) |
✅ |
🚫 |
✅ |
✅ |
지원되는 트리거
입력 처리는 각 플랫폼에서 다양한 메커니즘을 통해 이루어집니다.
트리거 |
Android 휴대전화 |
웹 (브라우저) |
iOS (iPhone/iPad) |
키보드 뒤로 버튼 |
✅ 뒤로 |
❓ |
✅ 뒤로 |
소프트웨어 뒤로 버튼 |
🚫 |
✅ 뒤로 |
✅ 뒤로 |
소프트웨어 위 버튼 |
✅ 증가 |
🚫 |
🚫 |
왼쪽에서 동작 |
✅ 뒤로 |
❓ |
✅ 뒤로 |
오른쪽에서 동작 |
✅ 뒤로 |
❓ |
✅ 전달 |
하단에서 동작 |
✅ 홈 |
🚫 |
✅ 홈 |