데브허브 | DEVHUB | Stateful vs. Stateless Composables In Jetpack Compose? - Everything You Need to KnowStateful vs. Stateless Composables In Jetpack Compose? - Everything You Need to Know
- Stateful Composables는 컴포저블 내부에서 자체 상태를 관리하며 (
remember 및 mutableStateOf 사용), 로직이 모듈화되어 재사용성이 높습니다. 🧩
- Stateless Composables는 외부에서 상태를 매개변수로 받아들이고, 상태 변경 이벤트를 람다로 노출하여 외부(예: ViewModel)에서 상태를 제어합니다. ↔️
- Stateful의 주요 단점은 외부에서 상태를 재설정하거나 제어하기 어렵고, 유연성이 떨어지며, 복잡한 로직 테스트에 UI 테스트가 필요하다는 점입니다. 🚧
- Stateless의 주요 장점은 외부에서 상태를 완벽하게 제어할 수 있어 유연하며, 상태 변경 로직을 ViewModel에서 JVM 단위 테스트로 쉽게 검증할 수 있다는 점입니다. ✅
remember로 관리되는 상태는 구성 변경(예: 화면 회전) 시 초기화되므로, 이를 방지하려면 rememberSaveable을 사용하여 상태를 유지해야 합니다. 🔄
- 일반적인 권장 사항은 특별한 예외가 없는 한, 상태를 직접 컴포저블 내부에 두기보다는 Stateless Composables를 사용하여 ViewModel에서 상태를 관리하는 것입니다. 💡
- Stateful Composables는 비밀번호 가시성 토글, 드롭다운 열기/닫기, 간단한 애니메이션 상태 등 외부 제어가 필요 없는 단순하고 자체 포함된 UI 동작에 적합한 예외적인 경우에 사용될 수 있습니다. 🎯
- ViewModel에 로직을 두면 빠르고 효율적인 JVM 단위 테스트가 가능하여 버그를 조기에 발견하고 복잡한 로직을 검증하는 데 유리합니다. 🚀
- 내부 상태 로직이 복잡해질 경우, Stateless 방식으로 전환하여 ViewModel에서 관리하는 것이 유지보수 및 테스트 용이성 측면에서 훨씬 유리합니다. 🧠