기존에 프레그먼트를 사용해서 화면을 구성하면 꽤 귀찮다. 한참을 분석해야지 어떤 동작을 하면 어떤 화면으로 넘어가지는지 파악이 된다. 난 navigation을 공부하고 나서 위에 언급한 단점을 상쇄해준다고 느꼈다. 아래와 같이 직관적으로 어디서 어디로 이동하는지 보여주니까 말이다.
이 게시글을 통해서 개념을 익히는 것도 중요하지만 실제로 코드를 이리저리 만져보는것도 중요하다. 글의 가장 아래에 내가 만들어둔 예시 프로젝트 링크를 첨부해놓겠다. (많관부)
아래는 공식문서에서 얘기하는 navigation을 사용했을때의 이점이다.
-
일관성있게 화면이 전환되고 애니메이션 효과를 적용할 수 있다.
-
딥링크를 구현하고 관리할 수 있다. (사용자가 보고자 하는 화면으로 이동시킬때 딥링크 사용)
-
몇가지 추가작업만 하면 되는 navigation drawers 나 navigation과 같은 패턴을 제공해준다.(개발자가 작업해야할게 훨씬 줄어든다는 의미인듯)
-
목적지 화면까지 타입 안정성이 보장된 데이터를 보내줄 수 있다.(type safety 라고 하는 플러그인을 추가하고 나면 쓸 수 있다. 컴파일 타임에 값을 설정해서 데이터를 목적지 화면까지 보낼 수 있기 때문에 예상하지 못한 객체를 받을 일이 없다.)
-
뷰모델 제공(뷰모델 스코프를 허용해서 화면간의 ui와 관련된 데이터를 공유할 수 있다.)
-
FragmentTransaction 을 제공해준다.
-
Back and up: Handles back and up actions correctly by default.(원문만 봐서는 뜻을 잘 모르겠다. 짐작컨데 navigation에 화면(frament) 스택이 쌓여서 개발자가 의도하지 않은 화면을 보여줄 수 있었던 것들을 더 쉽게 관리할 수 있게 해준다는 말인듯)
출처 : https://developer.android.com/guide/navigation
Navigation에는 중요한 세가지 개념이 있다. 1. Navigation graph 위의 사진이 바로 네비게이션 그래프다. 하나의 xml 파일 안에 화면간 어떻게 이동할지 다 정리되어있다. 밑에 언급한 내가 직접 만든 예제나 혹은 다른 사람들이 만든 예제를 본다면 res -> navigation 디렉터리에서 확인할 수 있다.어느 화면이 어디로 이동하는지, 어떤 데이터를 넘겨주는지 등의 내용이 내재되어있다.
2. NavigationHost
네비게이션을 보여줄 일종의 "틀" 이라고 생각하면 편하다. 이 틀안에 사용자가 보여주고 싶어하는 화면을 돌려가면서 보여주면 된다. navigation graph로 부터 destination(보여줄 화면)을 보여주는 빈 컨테이너다.
3.NavigationController
네비게이션Host에서 보여줘야 하는 화면이나 동작을 관리해주는 녀석이다. 하나의 NavigationHost에는 하나의 NavigationController만 가질 수 있다.
NavigationController 가 일종의 리모컨이라고 생각하자. NavigationHost는 화면만 보여주는 꺼져있는 브라운관 티비이고.우리는 리모컨으로 티비를 켜서 원하는 채널을 돌려서 보고싶은걸 본다. NavigationHost와 NavigationController도 비슷하다.
기술을 공부할때는 사용법도 중요하지만 어떤 생각과 의도로 기술을 만들었는지 늘 의문을 가져야 한다.구글의 공식문서를 보면 Navigation과 관련된 다양한 섹션이 존재하는데 이중 네비게이션의 원칙(개념)을 정리한 글을 이해하기 쉽게 정리해봤다.
출처 : https://developer.android.com/guide/navigation/principles
예제 프로젝트 링크 주소https://github.com/YunSeokVV/TodayILearend/tree/feat/androidNavigation
GitHub - YunSeokVV/TodayILearend: 오늘 내가 공부한 것들을 정리하는 저장소
오늘 내가 공부한 것들을 정리하는 저장소. Contribute to YunSeokVV/TodayILearend development by creating an account on GitHub.
github.com
(들어가서 feat/navigation만 따로 골라서 봐야한다. 불편을 드려서 죄송합니다...)
'안드로이드' 카테고리의 다른 글
안드로이드 RoomDB 예외 처리하는 방법 (0) | 2024.05.07 |
---|---|
FireBaseStorageCleanArchitecutre 예제 (0) | 2024.02.29 |
Flow (안드로이드) (0) | 2024.02.16 |
Hilt를 이용한 ViewModel 객체 생성 (0) | 2024.02.15 |
viewPager2 Indicator 예제 (0) | 2024.02.01 |