기존 Android(Java + XML) 환경에서는
화면의 단위가 Activity와 Fragment였다.
Intent에 데이터를 담아서 다음 Activity로 넘기면 됐다.일반적인 구조는 다음과 같았다.
Bundle / arguments로 데이터 전달 즉,
Fragment → Fragment 데이터 이동의 책임은 Activity에 있었다.
Fragment는 “이벤트를 발생시키는 UI” 역할에 가깝고,
데이터 전달과 화면 전환의 결정권은 Activity가 가지고 있었다.
Compose에서는 화면을 바라보는 관점이 바뀐다.
이 구조를 기존 개념에 대응시키면 다음과 같이 이해할 수 있다.
즉,
NavHost를 상위 UI, Composable을 하위 UI로 보면
Compose 구조는 기존 Fragment → Fragment 구조와 매우 유사하다.
Compose에서는
“화면에서 화면으로 값을 직접 넘긴다”기보다는,
공유된 상태를 저장해두고,
다음 화면이 그 상태를 읽는 방식을 사용한다.
이를 위해
같은 상태 보관용 객체를 사용한다.
예를 들어,
이 방식은 기존 Fragment 구조에서
Activity가 값을 들고 있다가 Fragment2에 전달하던 구조와
개념적으로 닮아 있다.
일반 클래스를 사용해도
Composable 간 데이터 이동은 가능하다.
하지만 실제 앱에서는
ViewModel 사용이 더 권장된다.
이유는 다음과 같다.
일반 클래스 + remember
ViewModel
즉,
앱 규모가 커질수록 상태는 UI 밖(ViewModel)에 두는 것이 더 안정적이다.
XML 시대
Compose 시대
그리고
하지만 본질적으로는
“하위 UI는 이벤트만 발생시키고,
상위 구조가 상태와 화면 전환을 관리한다”는 개념은 그대로다.