클린 아키텍처 예제를 작업 한 이후, 다양한 기술들을 적용시켜보고 있던 와중,
Fragment 간의 이동을 아주 편리하게 도와주는 AAC Navigation 이 있길래 사용해보있다.
AAC Navigation 에 대한 개념 정리글은 상당히 쉽게 찾아볼 수 있는 관계로,
필자가 공부하고 예제를 수정하면서 이해한 대로 정리해 보려고 한다.
우선, Navigation 을 사용하는 이유는
여러가지가 있겠지만, 필자가 생각하는 큰 이유는 다음과 같다.
- Fragment 간의 이동 시 안전하게 데이터 전달 가능하다.
- Fragment 간의 이동 시 쉽게 Animation 을 넣고, 이동이 가능하도록 해준다.
- Stack 관리를 편하게 해준다.
- GUI를 통해 쉽게 Flow 를 파악할 수 있게 해준다.
이것들 외에도 많은 기능과 장점들을 제공하지만, 필자가 생각하는 가장 큰 이유가 위의 4가지라고 생각한다.
자세한 장점은 android Developers 를 확인하길 바란다.
그렇다면,
어떻게 사용해야 할까?
사용하는 방법은 아주 간단하다.
Gradle 에서 선언해주고, nav_graph.xml 을 생성하여 fragment와 action 을 설정하고, controller 를 통해서 fragment 간의 이동을 해주면 된다.
우선 Gradle 에서 의존성에 관련한 설정부터 해보자.
이처럼 설정을 해주면 AAC Navigation 사용이 가능하다.
다음은 nav_graph.xml 을 생성할 차례이다.
이처럼, nav_graph 는 별도로 navigation 폴더를 생성하여 해당 폴더의 하위에 위치하도록 해준다.
해당 XML 파일을 생성하고 파일을 열어보면 다음과 같이 graph 를 확인할 수 있는 화면을 볼 수 있다.
위의 사진같은 경우, 필자가 3개의 Fragment 를 만들어 두었기 때문에 저런 형태로 보이지만 처음 생성 후에는 그래프는 비어있다.
nav_graph.xml 에는 우리가 사용할 Fragment 를 선언하고, 그 Fragment 에서의 이동 Action 을 설정해 줄 수 있다.
해당 xml을 보면 기존 xml 과는 다른 태그들을 확인할 수 있다.
- <navigation> 태그는 해당 xml 파일이 NavGraph 임을 나타내주는 태그이다. 따라서, 그래프를 확인하기 위해서는 navigation 태그를 최상단에 위치하도록 해야한다.
app:startDestination 속성을 통해 맨 처음 보여질 Fragment 도 반드시 설정해주어야 한다. - <fragment> 태그는 사용되는 Fragment 선언에 사용되며, Name 부분엔 해당 fragment 의 위치를 작성해준다.
tools:layout 속성에는 해당 fragment 가 사용하는 layout 파일을 설정해주면 된다. - <action> 태그는 해당 fragment 에서 이동할 수 있는 경우를 선언해 준다. 여기서 id 는 해당 action 에 대한 id 값이며 소스코드에서 해당 id 값을 가지고 action을 수행시키게 된다.
app:destination 의 경우, 해당 action 을 통해 이동하게 될 fragment 의 id 값을 넣어주면 된다.
즉, 위의 xml 파일을 해석해 보면
FirstFragment 에서 move_second_fragment 라는 action id 를 사용하여 SecondFragment 로 이동시킬 수 있으며, move_third_fragment 라는 action id 를 사용하여 ThirdFragment 로 이동시킬 수 있다는 뜻이다.
nav_graph 까지 설정을 했으면,
이제 시작 지점의 fragment 를 연결해줄 차례이다.
여기서 중요하게 볼 부분은 name, defaultNavHost, navGraph 속성이다.
NavHostFragment 라는 것은, AAC navigation 을 사용 할 때 Host 가 되는 Fragment 를 말한다.
즉, 가장 맨 처음 실행되는 Fragment 를 뜻하게 되며 해당 Fragment 는 navGraph 로 선언한 nav_graph 에 선언되어있다.
여기서 defaultNavHost 는 동시에 여러개 존재할 수 없으며, true 설정 할 경우 NavHostFragment 가 클릭 이벤트를 가로채어 우리가 원하는 action 을 수행할 수 있게 해준다.
이렇게 선언을 하게 되면
해당 fragment 를 선언한 layout 을 사용하는 곳이 가장 처음 시작하는 곳이 되는 것이고,
이 곳을 root 로 nav_graph 에 선언 한 action 에 따라 fragment 를 이동시킬 수 있게 된다.
마지막으로,
Action 에 따른 Fragment 이동에 대해서 확인해보자.
필자는 간단하게 이동에 관련된 예제를 만들기 위해 2가지 버튼을 가지고 있는 Fragment 를 3개 만들었고,
각 버튼의 클릭 이벤트에 Fragment 를 이동할 수 있도록 controller 를 사용하여 Fragment 를 이동시켜 주었다.
버튼의 종류에 따라서 해당 Fragment 로 이동할 수 있도록 선언해 주었다.
NavController 를 통하여 마지막에 선언된 Fragment xml 파일로 이동시킨다는 의미로 생각하면 된다.
즉, first_btn 이라는 id 값을 가진 버튼을 누르게되면 move_first_fragment.xml 파일을 사용하는 Fragment 로 화면이 이동된다는 의미이다.
이처럼 아주 간단하게 Fragment 간의 이동이 가능하게 된다.
AAC Navigation 은 생각보다 사용하는데 큰 어려움이 없는 것으로 생각된다.
실제로 프로젝트에 적용시키고 사용한다면 상당한 편의성을 제공해주지 않을까 생각한다.
해당 게시글에 사용한 예제는 GitHub 에 올려두었다.
https://github.com/HeeGyeong/ModuleArchitecture
'Android > AAC' 카테고리의 다른 글
[Android] AAC Navigation + BottomNavigationView 사용 방법. (0) | 2022.03.11 |
---|---|
[Android] Jetpack DataStore 실전 압축 정리 (0) | 2022.02.17 |
[Android] 데이터 바인딩 어댑터 (Data Binding Adapter) 사용 방법 (0) | 2022.02.07 |
[Android] Room 라이브러리 (0) | 2020.06.22 |
[Android] ViewModel 기본 개념 (0) | 2020.06.22 |