위젯이 빌드(화면에 그려진)된 후에는 외부 데이터나 사용자 상호작용에 의해 스스로의 모습이나 상태를 변경할 수 없습니다.
변경되지 않는 텍스트, 아이콘, 정적인 이미지 등 고정된 콘텐츠를 표시할 때 사용합니다.
위젯의 생명 주기 동안 상태(State)가 변경될 수 있으며, 상태가 변경되면 위젯이 자동으로 화면에 다시 그려집니다 (rebuild).
체크박스, 슬라이더, 사용자 입력, 카운터, 애니메이션 등 시간이 지나거나 사용자 상호작용에 따라 모습이 바뀌어야 하는 모든 동적인 UI에 사용합니다.
StatefulWidget은 이름 그대로 '상태를 가진 위젯'이지만, 실제로 변하는 상태 데이터 자체를 직접 가지지 않습니다. 대신, 상태를 관리하는 별도의 객체를 생성합니다.
StatefulWidget은 다음 두 개의 클래스로 구성됩니다.
위젯 자체를 정의하는 불변(immutable) 클래스입니다.
위젯의 설정(Configuration) 정보를 담고, 유일하게 재정의해야 하는 메서드는 createState()입니다.
createState(): 이 메서드가 호출되어 실제로 변하는 상태 데이터와 로직을 관리할 State 객체를 생성하고 연결해 줍니다.
위젯의 생명주기 동안 변경될 수 있는 데이터(상태)와 비즈니스 로직, 그리고 UI를 그리는 build 메서드를 포함하는 클래스입니다.
상태(Data) 보관: 위젯이 다시 그려질 때도 유지되어야 하는 변수들(예: 카운터 앱의 숫자 _counter)을 저장합니다.
build() 메서드 포함: 위젯의 UI를 실제로 그리는 메서드입니다.
setState() 메서드: 이 메서드를 호출하여 상태 데이터를 변경하면, Flutter 프레임워크가 이를 감지하고 해당 위젯의 build() 메서드를 다시 실행하여 변경된 UI를 화면에 반영합니다.