본문 바로가기
Android/네비게이션

JeckPack 네비게이션이란 (1) - 이론 편

by 안스 인민군 2023. 6. 18.

한마디로 설명하면

한마디로 설명하면 JeckPack 네비게이션 이란 화면간의 이동을 할 수 있게 도와 주는 컴포넌트 이다.

나오게 된 이유

이전에는 우리는 화면간의 이동을 Intent 를 사용하여 화면간의 이동을 하였었다.

그러나 Intent는 아래와 같은 단점을 야기했었다.

  1. 코드의 복잡성: Intent를 사용하여 화면 간 이동을 구현하면 각각의 이동에 대해 별도의 Intent 객체를 생성하고 전달해야 한다. 이는 코드의 복잡성을 증가시킬 수 있다. 또한, Intent를 통해 전달되는 데이터나 인자들을 관리하기 위해서는 별도의 키(Key)를 사용해야 하며, 이는 번거로움을 초래할 수 있다.
  2. 안전성과 일관성의 부재: Intent를 사용하여 화면 전환을 구현하는 경우, 뒤로 가기 동작이나 이전 화면으로의 정확한 복귀를 처리하기 위해 추가적인 코드가 필요할 수 있다. 또한, 개발자가 일관된 방식으로 화면 전환을 구현하지 않으면 앱 내에서 일관성이 없을 수 있다.
  3. 시각적인 관리의 어려움: Intent를 사용하여 화면 전환을 구현하는 경우, 앱의 전체적인 화면 구조를 시각적으로 파악하기 어렵다. Intent로만 화면 전환을 처리하면서 화면 간의 관계와 흐름을 파악하기 위해서는 코드를 살펴보아야 하므로 개발자에게 시각적인 표현이 부족하다.
  4. 애니메이션 및 전환 효과의 제한성: Intent를 사용하여 화면 전환을 구현하는 경우, 애니메이션 및 전환 효과를 추가하기가 어렵다. 화면 전환 시 부드러운 애니메이션 효과나 전환 효과를 적용하기 위해서는 추가적인 코드와 작업이 필요하다.
  5. 유지보수의 어려움: Intent를 사용하여 화면 전환을 구현하는 경우, 앱이 복잡해지고 화면의 수가 증가하면 유지보수가 어려워질 수 있다. 각각의 화면 전환에 대한 코드가 분산되어 있기 때문에, 변경 또는 수정이 필요할 때 여러 곳을 수정해야 할 수 있다.

이러한 단점들을 보완하기 위해 JeckPack 네비게이션은 일관된 코드 작성, 안전한 탐색, 시각적인 관리, 애니메이션 전환 효과 지원, 그리고 유지보수 용이성 등을 제공한다.


JeckPack Navigation

네비게이션은 앱 사용자가 앱 내에서 다른 화면으로 이동하는 방법을 제공하는 것을 의미한다. 예를 들어, 앱의 메인 화면에서 설정 화면으로 이동하거나, 목록 화면에서 세부 정보 화면으로 이동하는 등의 동작이 네비게이션에 해당한다.

 

주요 구성 요소로는 네비게이션 그래프, 네비게이션 호스트, 네비게이션 컨트롤러가 있다.

  1. Navigation Graph: 앱의 화면 구조를 시각적으로 표현한 그래프이다. 이 그래프는 액티비티와 프래그먼트 사이의 관계를 정의하고, 화면 간 전환 경로를 설정한다.
  2. NavHostFragment: 네비게이션 그래프를 호스팅하는 컨테이너 역할을 하는 액티비티나 프래그먼트이다. 이 호스트는 앱의 메인 화면으로 설정되고, 화면 전환과 프래그먼트 스택 관리를 담당한다.
  3. NavController: 네비게이션 그래프를 기반으로 앱 내에서 화면 전환을 처리하는 객체이다. 네비게이션 컨트롤러는 프래그먼트 간 이동을 담당하며, 애니메이션 및 전환 효과를 지원한다.

Navigation Graph(New Resource)

  • Navigation Graph는 새로운 리소스 타입이다
  • xml 파일 형태로 탐색에 관련된 정보를 포함하고 중심화한다.
  • AndroidStudio 3.3 이상에서 이용 가능하다.

Navigation 정보들을 한 곳에 모은 XML 리소스로, 앱에서 진행될 수 있는 모든 흐름을 보여주고 앱 내 Fragment를 한눈에 확인하기 쉽다.

위의 인터페이스에서 우측에 있는 정보들은 액션(화살표)를 클릭하면 볼 수 있는 정보들이다.

데이터, 트랜잭션, 애니메이션, 백 스택 등을 조정한다.

화면을 클릭하면 딥링크 url 등을 볼 수 있다.

NavHostFragment(Layout)

  • 프래그먼트를 담는 창
  • Navigation Graph에서 대상을 표시하는 빈 컨테이너

액티비티의 FragmentContainerView에 android:name 속성으로 설정한다.

자동 완성이 안 되니 직접..!

NavController(Fragment)

  • Java/Kotlin 코드로 사용
  • NavHostFragment는 개별적으로 NavController를 가지고 있음
  • 실질적으로 화면 이동이 이루어지는 부분
  • xml 아이디로 원하는 화면(fragment)으로 이동 가능
  • 하지만 SafeArgs Plugin 사용하여 이동하는 것을 권한

 예를 들어, nav_graph.xml 파일을 생성하고 다음과 같이 정의할 있다.

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.app.HomeFragment"
        android:label="홈 화면" />

    <fragment
        android:id="@+id/listFragment"
        android:name="com.example.app.ListFragment"
        android:label="목록 화면" />

    <fragment
        android:id="@+id/detailFragment"
        android:name="com.example.app.DetailFragment"
        android:label="상세 화면" />

    <action
        android:id="@+id/action_home_to_list"
        app:destination="@id/listFragment" />

    <action
        android:id="@+id/action_list_to_detail"
        app:destination="@id/detailFragment" />

</navigation>

'Android > 네비게이션' 카테고리의 다른 글

네비게이션 실전편  (0) 2023.08.07
Single Activity Architecture(SAA)란?  (0) 2023.08.02
네비게이션이란 (1)  (0) 2023.08.02
JeckPack 네비게이션이란 (2) - 실전 편  (0) 2023.06.19