🔀
StatefulWidget vs StatelessWidget
상태 유무에 따른 위젯 선택 기준
StatelessWidget은 한 번 빌드되면 내부 상태가 변하지 않는 위젯입니다. Text, Icon, Container 등이 대표적입니다.
StatefulWidget은 setState()를 호출하여 UI를 갱신할 수 있는 위젯입니다. 체크박스, 슬라이더, 폼 입력 등 사용자 상호작용이 있는 UI에 사용합니다.
모던 Flutter에서는 상태 관리 라이브러리(Provider, Riverpod)를 사용하여 StatefulWidget 사용을 최소화하는 것이 권장됩니다.
구현 순서
1
UI가 외부 입력에 따라 변하는지 판단 → Stateless or Stateful 결정
2
StatefulWidget 사용 시 State 클래스에서 setState() 호출
3
initState()에서 초기화, dispose()에서 리소스 해제
4
가능하면 상태 관리 라이브러리로 대체하여 StatefulWidget 줄이기
장점
- ✓ StatelessWidget은 가볍고 테스트하기 쉬움
- ✓ StatefulWidget은 로컬 상태 관리에 직관적
단점
- ✗ setState()는 해당 위젯 전체를 rebuild → 성능 주의
- ✗ 복잡한 상태를 StatefulWidget으로만 관리하면 코드가 복잡해짐
사용 사례
카운터, 토글, 폼 입력 등 상호작용 UI
정보 표시 전용 카드, 라벨 (StatelessWidget)