StatelessWidget은 배경, 제목, 고정된 텍스트, 로고 등 앱에서 변하지 않는 UI 요소들에 주로 사용된다.
상태가 필요 없는 곳에서는 더 가벼운 StatelessWidget을 사용하고, 상태 관리가 필요한 곳에서만 StatefulWidget을 사용하는 것이 좋은 실천 방법이다.-> 굉장히 중요한 원칙
리소스 낭비와 오버헤드가 발생하고 코드가 복잡해지기 때문이다
예를들어
100개의 아이템이 있다면:
- StatelessWidget 방식: 100개의 위젯 객체만 생성
- StatefulWidget 방식: 100개의 위젯 객체 + 100개의 상태 객체 생성
-> 성능 향상 차이가 많이 난다.
State 객체를 통해 상태 관리가 큰 이유인거 같다.
- CPU 시간: 필요 없는 상태 관리 로직 처리
- 메모리 사용량: 추가 객체 생성 및 유지
그래서
대부분의 개발자는 경험적으로 "가능한 한 StatelessWidget을 사용하고, 필요할 때만 StatefulWidget으로 전환"하는 접근 방식을 취한다 중요힌 원칙인듯.
실무인 웹 뷰는 당연히 스테이트 풀이다.
왜냐하면 폼 주입을 하기도 하고 뒤로가기등을 할때 히스토리 저장을 해야하기 때문이다.
다음 페이지에 스테이트풀과 프로바이더를 비교해보자
ㅡㅡㅡㅡㅡㅡ
정리
StatefulWidget vs StatelessWidget 개념 정리
지금까지 Flutter에서 StatefulWidget과 StatelessWidget의 차이점에 대해 살펴보았습니다. 핵심 내용을 정리해 드리겠습니다.
1. 기본 개념
StatelessWidget:
- 내부 상태가 없는 불변(immutable) 위젯
- 한 번 생성되면 변경되지 않음
- 부모로부터 받은 데이터만 사용하여 UI 구성
- 같은 입력에 대해 항상 같은 출력 제공
StatefulWidget:
- 내부 상태를 가질 수 있는 위젯
- 위젯 자체는 불변이지만, 연결된 State 객체를 통해 상태 관리
- 시간이 지남에 따라 상태가 변경될 수 있음
- 사용자 입력이나 비동기 작업에 반응하여 UI 업데이트 가능
2. 상태(State)의 의미
상태란 "시간이 지남에 따라 변할 수 있고, 위젯의 모양이나 동작에 영향을 주는 데이터"입니다.
- 예: 카운터 값, 텍스트 필드 입력값, 체크박스 선택 여부 등
- State 클래스의 인스턴스 변수로 정의됨
- setState() 호출을 통해 변경됨
3. 위젯의 불변성
Flutter의 모든 위젯(StatefulWidget 포함)은 불변(immutable)입니다.
- StatefulWidget도 위젯 자체는 불변이지만, 연결된 State 객체는 가변적(mutable)
- 위젯이 "변경된다"는 것은 실제로는 위젯이 재생성되는 것을 의미
4. 적합한 사용 사례
StatelessWidget 사용 사례:
- 정적 UI 요소 (로고, 제목, 배경 등)
- 데이터 표시 위젯 (텍스트 레이블, 정보 카드 등)
- 레이아웃 컴포넌트 (행, 열, 컨테이너 등)
- 스타일링 래퍼
- 이벤트를 부모에게 전달하는 UI 요소
StatefulWidget 사용 사례:
- 사용자 입력 처리 (폼, 텍스트 필드 등)
- 애니메이션 요소
- 시간에 따라 변하는 데이터를 표시하는 위젯
- 자체적으로 상태를 관리해야 하는 복잡한 UI 요소
5. 성능과 리소스 고려사항
StatelessWidget은 일반적으로 StatefulWidget보다 가볍고 효율적입니다:
- 메모리 사용량이 적음 (상태 객체가 없음)
- 최적화 가능성이 높음
- 코드가 더 간결하고 유지보수가 쉬움
그러나 작은 앱이나 간단한 UI에서는 이런 차이가 사용자 경험에 큰 영향을 미치지 않을 수 있습니다.
6. 실용적인 접근 방식
- "필요한 것만 사용하라" - 상태가 필요 없으면 StatelessWidget을 사용
- 코드의 의도를 명확히 표현하기 위해 적절한 위젯 유형 선택
- 앱이 커지고 복잡해질수록 이러한 최적화가 더 중요해짐
Flutter 개발에서는 처음부터 완벽한 설계를 목표로 하기보다는, 필요에 따라 StatelessWidget에서 StatefulWidget으로 또는 그 반대로 리팩토링하는 것이 일반적입니다.
이러한 개념들을 이해하면 Flutter 앱을 더 효율적으로 설계하고 구현할 수 있습니다.
'개념' 카테고리의 다른 글
스테이트풀 보다 프로바이더로 상태관리 하는이유 (0) | 2025.04.12 |
---|---|
상태관리관점의 StatelessWidget vs StatefulWidget (0) | 2025.04.12 |
기술 스택이란 (1) | 2025.04.11 |
헤더란 (0) | 2025.03.20 |
모듈,스키마 패키지, 플러그인 (0) | 2025.03.19 |