
[Android] Navigation으로 화면 전환 관리하기
안드로이드 애플리케이션에서 화면 전환은 중요한 요소입니다. 사용자가 어떤 행동을 했을 때, 그에 맞는 화면을 보여주어야 하기 때문입니다. 이전에는 Intent
를 사용해 화면을 전환하는 방식이 일반적이었으나, Navigation Component가 도입되면서 네비게이션을 더욱 직관적이고 효율적으로 처리할 수 있게 되었습니다.
Navigation Component란?
Navigation Component는 Jetpack 라이브러리의 일부로, 앱 내 화면 간의 네비게이션을 관리하고 쉽게 처리할 수 있는 도구입니다. 이를 사용하면 화면 전환뿐만 아니라, 백스택 관리, 파라미터 전달, 애니메이션 등을 더욱 쉽게 구현할 수 있습니다.
1. Navigation Component 설정하기
먼저, 프로젝트에 Navigation Component를 추가해야 합니다. build.gradle
파일에 다음과 같은 의존성을 추가합니다.
dependencies {
def nav_version = "2.6.0" // 사용 중인 Navigation 버전에 맞게 설정
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
의존성을 추가한 후 Sync Now
를 클릭하여 Gradle 동기화를 완료합니다.
2. Navigation 그래프 생성하기
Navigation Component의 핵심은 Navigation 그래프입니다. 이는 앱 내에서 화면 간의 관계를 정의하는 XML 파일로, 각 화면을 어떻게 연결할지 설정합니다.
res/navigation
폴더를 만들고, 그 안에nav_graph.xml
파일을 생성합니다.nav_graph.xml
파일에서 각 화면(Fragment)을 연결합니다. 예를 들어, 두 개의 화면FirstFragment
와SecondFragment
를 연결하는 경우, 다음과 같이 작성할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nav_graph"
app:startDestination="@id/firstFragment">
<fragment
android:id="@+id/firstFragment"
android:name="com.example.app.FirstFragment"
android:label="First Fragment"
tools:layout="@layout/fragment_first">
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.app.SecondFragment"
android:label="Second Fragment"
tools:layout="@layout/fragment_second" />
</navigation>
이렇게 설정하면 FirstFragment
에서 SecondFragment
로 이동할 수 있는 액션을 정의하게 됩니다.
3. 화면 전환하기
화면 전환은 NavController
를 사용하여 처리할 수 있습니다. NavController
는 네비게이션 그래프에 정의된 액션을 실행합니다. 예를 들어, FirstFragment
에서 버튼을 클릭할 때 SecondFragment
로 화면을 전환하려면 다음과 같이 작성합니다.
val navController = findNavController()
button.setOnClickListener {
navController.navigate(R.id.action_firstFragment_to_secondFragment)
}
4. 파라미터 전달하기
화면 간에 데이터를 전달하는 것도 Navigation Component로 쉽게 처리할 수 있습니다. 예를 들어, FirstFragment
에서 SecondFragment
로 데이터를 전달하려면, Bundle
을 사용하여 파라미터를 전달할 수 있습니다.
val action = FirstFragmentDirections.actionFirstFragmentToSecondFragment("Hello, Second Fragment!")
navController.navigate(action)
SecondFragment
에서는 다음과 같이 데이터를 받을 수 있습니다.
val args = SecondFragmentArgs.fromBundle(requireArguments())
val message = args.message
5. Up 및 Back 버튼 처리
Navigation Component는 백스택을 자동으로 관리해주기 때문에 Up
버튼을 눌렀을 때, 이전 화면으로 돌아가는 동작도 자동으로 처리됩니다. 만약 커스텀 동작이 필요하다면, NavController
의 popBackStack()
을 사용하여 처리할 수 있습니다.
navController.popBackStack()
Navigation Component는 앱 내 화면 전환을 관리하는 데 매우 유용한 도구입니다. 직관적인 XML 설정과 Kotlin에서의 간단한 코드로 복잡한 네비게이션을 손쉽게 처리할 수 있습니다. 이를 통해 앱의 유지보수성도 높아지고, 코드가 깔끔하게 유지됩니다.