본문 바로가기

Android/AAC

[Android] AAC Navigation 사용 실전 압축 정리

728x90

클린 아키텍처 예제를 작업 한 이후, 다양한 기술들을 적용시켜보고 있던 와중,

Fragment 간의 이동을 아주 편리하게 도와주는 AAC Navigation 이 있길래 사용해보있다.

 

AAC Navigation 에 대한 개념 정리글은 상당히 쉽게 찾아볼 수 있는 관계로,

필자가 공부하고 예제를 수정하면서 이해한 대로 정리해 보려고 한다.


 

우선, Navigation 을 사용하는 이유

여러가지가 있겠지만, 필자가 생각하는 큰 이유는 다음과 같다.

 

  • Fragment 간의 이동 시 안전하게 데이터 전달 가능하다.
  • Fragment 간의 이동 시 쉽게 Animation 을 넣고, 이동이 가능하도록 해준다.
  • Stack 관리를 편하게 해준다.
  • GUI를 통해 쉽게 Flow 를 파악할 수 있게 해준다.

이것들 외에도 많은 기능과 장점들을 제공하지만, 필자가 생각하는 가장 큰 이유가 위의 4가지라고 생각한다.

자세한 장점은 android Developers 를 확인하길 바란다.

https://developer.android.com/guide/navigation?gclid=EAIaIQobChMIiKOI2en-9QIVE1VgCh1bpQ53EAAYASAAEgIcOfD_BwE&gclsrc=aw.ds 

 

탐색  |  Android 개발자  |  Android Developers

Android Jetpack의 탐색 구성요소를 사용하여 앱에서 탐색 구현

developer.android.com

 


그렇다면,

어떻게 사용해야 할까?

 

사용하는 방법은 아주 간단하다.

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

 

GitHub - HeeGyeong/ModuleArchitecture

Contribute to HeeGyeong/ModuleArchitecture development by creating an account on GitHub.

github.com

 

728x90