**Flutter 생명주기(Lifecycle)**란, 앱 실행 중 위젯이 생성되고 사라지기까지의 전 과정을 의미합니다.
즉, Flutter 프레임워크가 화면에 위젯을 렌더링하고 상태를 관리하는 일련의 단계죠.
이 개념을 정확히 이해하면 불필요한 리빌드(rebuild)를 줄이고, 성능 최적화에도 큰 도움이 됩니다.
StatelessWidget은 이름 그대로 상태(State)가 없는 위젯입니다.
한 번 생성되면 변경되지 않으며, 다음 단계만 거칩니다.
build() → 화면 렌더링예를 들어, 단순한 텍스트나 아이콘 같은 고정 UI에 적합합니다.
class HelloText extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text('Hello Flutter!');
}
}
StatefulWidget은 상태가 변할 수 있는 위젯입니다.
이 위젯은 State 객체를 가지며, 다음과 같은 생명주기 단계를 거칩니다.
State 객체를 생성합니다. 위젯이 처음 화면에 등장할 때 한 번만 호출됩니다.
초기화 로직을 처리합니다. 예를 들어, API 요청이나 컨트롤러 초기화 등을 수행합니다.
⚡
super.initState()는 반드시 호출해야 합니다.
UI를 렌더링하는 단계입니다. 상태가 변경되면 이 메서드가 다시 호출되어 화면을 갱신합니다.
부모 위젯이 변경되었을 때 호출되어, 위젯 상태를 새로 동기화합니다.
위젯이 위젯 트리에서 제거되기 전에 호출됩니다.
리소스 해제 단계입니다. Controller, Stream 등을 정리해야 메모리 누수를 방지할 수 있습니다.
class CounterWidget extends StatefulWidget {
@override
State<CounterWidget> createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int _count = 0;
@override
void initState() {
super.initState();
print('initState 호출!');
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () => setState(() => _count++),
child: Text('$_count'),
);
}
@override
void dispose() {
print('dispose 호출!');
super.dispose();
}
}
initState() : API 호출, 초기 데이터 로딩
build() : 상태 변경 시 UI 업데이트
dispose() : 리소스 정리, 메모리 관리
didChangeAppLifecycleState() : 앱의 포그라운드/백그라운드 상태 감지
예를 들어, 아래처럼 WidgetsBindingObserver를 통해 앱 전체 생명주기를 감시할 수도 있습니다.
class AppLifecycleObserver extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
print('현재 앱 상태: $state');
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
}
Flutter 생명주기는 단순히 위젯이 만들어지고 사라지는 과정이 아닙니다.
앱 성능, 리소스 효율성, 상태 관리의 핵심이 되는 로직입니다.
초보 개발자라면 initState → build → dispose 순서를 명확히 익히는 것부터 시작해보세요.
이 구조를 이해하면 상태 관리 패턴(Provider, BLoC, Riverpod) 도 훨씬 자연스럽게 익힐 수 있습니다.
Flutter 생명주기는 앱의 안정성과 성능을 결정짓는 핵심 개념입니다.
위젯의 생성부터 소멸까지의 흐름을 정확히 이해하면, Flutter 개발의 효율성과 유지보수성이 극대화됩니다.
지금 바로 자신의 코드에서 initState, build, dispose가 어떻게 작동하는지 점검해보세요.
Aluminium OS - Android가 PC로 향하는 이유와 의미 2025년 말, 구글이 내부 코드명 “Aluminium”로 불리는…
1. 2026년 기준중위소득이란? 2026년 기준중위소득은 대한민국 전체 가구의 중간 소득을 의미하며, 정부의 다양한 복지사업과 지원제도의…
월드컵 2포트 진입, 왜 이렇게 중요한가? 한국 축구 대표팀이 월드컵 2포트 진입을 목표로 국제 A매치를…
플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 초고속 UI를 구현할까 플러터(Flutter)는 단 하나의 코드베이스로…
플러터 그리드 위젯 완벽 가이드 플러터(Flutter)는 하나의 코드베이스로 iOS, Android, Web까지 동시에 빌드할 수 있는…
1. 사건 개요 — 연세대 중간고사에서 벌어진 AI 컨닝 2025년 11월 초, 연세대학교 신촌캠퍼스의 한…