현재 해당 라이브러리와 프레그먼트 라이브러리의 최근 개발 버전이 님이 말씀하시는 multi stack을 지원하기 위한 코드를 추가했습니다. 아직 개발 버전이라 프로덕션에 사용하기에는 좀 그렇지만, 다운받아서 테스트해 보시고 원하는 동작을 한다면, 정식 릴리즈 될 때까지 기다리시거나 아니면 alpha 버전을 사용해도 무방하시면 사용하시면 될 것 같아요. Jetpack말고도 해당 기능을 지원하는 잘 알려진 다른 라이브러리들도 여럿 있습니다. Simplestack같은. 아니면 그냥 FragmentManager만 사용하셔도 대부분은 사실 충분합니다.
참고로, 아래 링크에 가시면 유틸리티 클래스가 있습니다.
https://github.com/techyourchance/android-architecture-course/tree/master/app/src/main/java/com/techyourchance/mvc/screens/common/fragmentframehelper
사실 대부분의 업무용 앱은 위의 링크에 있는 FramentFrameHelper 안의 메소들만 잘 사용하시면 충분하다고 생각합니다. FragmentFrameHelper 같은 클래스를 바로 사용하기 보다는 Navigation을 관리하는 클래스를 하나 만드셔서 여기서 모든 Navigation 을 관리하도록 하는게 코드를 깨끗하고 관리하기 좋게 만드는 방법입니다. Jetpack Navigation 을 사용하더라도 해당 라이브러리가 어딘가로 이동하는 기능만 제공하기 때문에 다시 이런 식으로 내 앱에서 Navigation의 흐름을 관리하는 클래스가 다시 필요해집니다.
한가지 예로, 로그인 화면으로 이동할 때,
Navigation Compoent: findNavController.navigate(R.id.loginFragment)
My wrapper class: myNavigator.goToLogin()
바로 Navigation Component를 프레그먼트에 바로 사용하는 것보다는 wrapper class 처럼, 실제 구현코드를 감추는게 훨씬 재사용성이 뛰어납니다. 나중에 Navigation Component를 다른 것으로 교체해야하는 상황이 되거나 하면 훨씬 더 그렇죠. 왜냐하면 첫번째는 내가 코드에 대한 컨트롤이 전무하지만, 두번째의 경우는 어느정도의 컨트롤을 내가 할 수 있기 때문입니다. Navigation Component를 사용했는지, 다른 걸 사용했는지 사실 이 코드를 호출하는 입장에서는 상관이 없기 때문입니다.
개인적으로는 새로운 프로젝트을 한다면 Navigation Component는 굳이 사용하지는 않을 것 같습니다. (순전히 개인적인 생각입니다.) 물론 multi stack이 잘 지원된다면 고려해 볼만은 합니다만.
결론은, 딱히 정답은 없습니다. 님의 요구사항에 맞게 선택하시면 될 것 같아요. 다만, 잠정적인 문제점을 알고 있다면, 당혹스럽지 않겠죠.