본문 바로가기
Android

[Android/Kotlin] 안드로이드 네비게이션: NavController 찾기의 두 가지 방법 비교

by quessr 2024. 5. 18.

 

안드로이드 개발 시 자주 마주치는 네비게이션 컴포넌트, 특히 NavController를 찾는 두 가지 방법에 대해 알아보고, 각각의 장단점을 비교해보는 시간을 가지려고 합니다.

안드로이드의 네비게이션 컴포넌트는 앱 내에서 화면 이동(네비게이션)을 용이하게 관리해 주는 매우 중요한 요소입니다. 그렇다면 NavController를 어떻게 찾을 수 있을까요? 아래에서 자세히 알아보겠습니다.

 

방법 1: 공식 문서 방식

공식 문서는 Activity에서 NavHostFragment 찾고, 안에 있는 NavController 사용하는 방법을 권장합니다.

val navHostFragment =
    supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

 

이 방법의 장점은 코드가 명시적이며, Activity 내에서 네비게이션 로직을 관리할 때 매우 직관적이라는 점입니다. 개발자가 코드를 보고 바로 이해할 수 있으며, 디버깅하기도 쉽습니다. 하지만, 주로 Activity에 한정되어 사용되며, Fragment나 Adapter에서 사용할 때 추가적인 작업이 필요할 수 있습니다.

 

방법 2: Navigation.findNavController(View) 사용하기

다른 방법은 Navigation 유틸리티 클래스의 findNavController(View) 메소드를 사용하여 View 통해 NavController 찾는 것입니다.

btnGoProfileDetail.setOnClickListener {
    val navController =
        Navigation.findNavController(requireActivity().findViewById(R.id.fragment_container_view))
    navController.navigate(R.id.action_fragmentMain_to_fragmentProfileDetail)
}

 

이 방식의 가장 큰 장점은 Fragment나 ViewHolder 등에서 사용하기 매우 편리하다는 점입니다. 직접적으로 View를 통해 NavController에 접근하기 때문에, 특히 Fragment 내부에서 네비게이션 작업을 수행할 때 더욱 유용합니다. 하지만, 이 방법을 사용할 때는 View가 올바르게 NavController를 찾을 수 있는 NavHost와 연결되어 있어야 하며, 그렇지 않은 경우 예외가 발생할 수 있습니다.

 

결론

따라서, 어떤 방법이 더 좋은지는 개발 상황에 따라 다릅니다. 만약 Activity에서 네비게이션 로직을 중앙집중적으로 관리하고 싶다면 공식 문서의 방법을, Fragment나 Adapter 내에서 네비게이션을 수행하고자 한다면 Navigation.findNavController(View)를 사용하는 것이 더 적합할 수 있습니다. 개발자의 의도와 애플리케이션의 구조에 맞게 가장 효율적이고 안정적인 방법을 선택하는 것이 중요합니다.