🔀

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)