Flutter

Navigation VS GoRounter

우왕차 2024. 12. 20. 19:38

화면 전환을 할 때 길을 알려주는 것을 Navigation이라고 합니다. Flutter에서는 다양한 방법으로 화면 전환을 구현할 수 있으며, 그 중 두 가지 주요 방법은 Navigator와 GoRouter입니다. 이 글에서는 두 네비게이션 방법의 특징과 장단점을 비교하여, 어떤 상황에서 어떤 방법을 선택해야 할지에 대해 알아보겠습니다.

 

 

Navigator

Navigator는 Flutter에서 기본으로 제공하는 네비게이션 기능으로, 화면 전환을 위해 push와 pop 메서드를 사용하여 화면을 스택에 쌓고 제거하는 방식으로 작동합니다. 기본적인 기능을 제공하지만, 몇 가지 단점이 존재합니다.

 

1. 제한된 애니메이션 및 시각 효과: Navigator는 기본적으로 애니메이션이나 시각 효과를 포함하고 있지만, 개발자가 이를 세밀하게 지정할 수 없습니다. 이로 인해 사용자 경험을 최적화하기 어려운 경우가 많습니다.

2. 고급 기능 부족: 경로 매개변수나 쿼리 매개변수와 같은 고급 기능을 지원하지 않아 복잡한 경로 탐색이 필요할 때 어려움을 겪을 수 있습니다. 예를 들어, 특정 ID를 가진 게시물을 열기 위해서는 복잡한 로직을 구현해야 할 수 있습니다.

3. 유지보수 및 디버깅의 어려움: 앱이 복잡해질수록 각 화면 간의 push와 pop으로만 화면을 전환하다 보면, 코드의 가독성이 떨어지고 유지보수 및 디버깅이 어려워질 수 있습니다. 특히, 여러 화면이 얽혀 있는 경우에는 문제를 추적하기가 힘들어질 수 있습니다.

 

이러한 단점들은 앱의 복잡도가 커질수록 더욱 두드러지며, 이를 해결하기 위해 GoRouter와 같은 대안이 필요합니다.

 

GoRouter

GoRouter는 URL 기반의 라우팅 패키지로, 웹 애플리케이션에서 흔히 사용되는 URL 방식처럼 작동합니다. 이로 인해 Flutter 앱에서도 보다 직관적이고 유연한 네비게이션을 구현할 수 있습니다.

특징

  • template syntax 지원
    • GoRouter는 경로 설정 시 템플릿 구문을 지원합니다. 예를 들어, 특정 게시물의 ID를 전달하고 싶을 때 /post/:id와 같은 경로를 설정하고, 실제로는 /post/1과 같이 접근할 수 있습니다. 이는 코드의 가독성을 높이고, 경로를 쉽게 관리할 수 있게 해줍니다.
  • URL에 query parameter 지원
    • GoRouter는 URL에 쿼리 매개변수를 지원하여, 새로고침을 했을 때도 파라미터를 유지할 수 있습니다.
    • 예를 들어, /search?text=test와 같은 형식으로 검색 결과를 유지할 수 있어 사용자 경험을 향상시킵니다.
  • 리다이렉트 지원
    • 조건에 따라 화면을 쉽게 통제할 수 있는 리다이렉트 기능을 제공합니다.
    • 예를 들어, 사용자가 로그인이 되어 있지 않을 때 다른 화면 요청 시 로그인 페이지로 리다이렉트할 수 있어, 보안과 사용자 흐름을 관리하는 데 유리합니다.
  • 에러페이지 지원
    • 러가 발생했을 때, 단순히 에러 메시지를 보여주는 것이 아니라, 에러 핸들링을 통해 특정 화면으로 안내할 수 있습니다. 이를 통해 사용자에게 보다 친절한 경험을 제공할 수 있습니다.

 

결론

Flutter에서의 네비게이션은 앱의 사용자 경험에 큰 영향을 미칩니다. Navigator는 기본적인 기능을 제공하지만, 복잡한 앱에서는 유지보수와 디버깅이 어려워질 수 있습니다. 반면, GoRouter는 URL 기반의 직관적인 라우팅을 제공하여, 복잡한 네비게이션 구조에서도 유연하게 대처할 수 있습니다.

따라서, 앱의 규모와 복잡성에 따라 적절한 네비게이션 방법을 선택하는 것이 중요합니다. 간단한 앱에서는 Navigator를 사용할 수 있지만, 복잡한 구조를 가진 앱에서는 GoRouter를 고려하는 것이 좋습니다.


'Flutter' 카테고리의 다른 글

Firebase 쉽게 연결하기  (1) 2024.12.20
선언형 UI  (0) 2024.11.21
flutter 코드 중간에 함수 쓰기?  (0) 2024.11.20
위젯 설정  (0) 2024.11.12
파일에 저장하기  (0) 2024.11.06