Flutter 생명주기란 무엇인가?
**Flutter 생명주기(Lifecycle)**란, 앱 실행 중 위젯이 생성되고 사라지기까지의 전 과정을 의미합니다.
즉, Flutter 프레임워크가 화면에 위젯을 렌더링하고 상태를 관리하는 일련의 단계죠.
이 개념을 정확히 이해하면 불필요한 리빌드(rebuild)를 줄이고, 성능 최적화에도 큰 도움이 됩니다.
StatelessWidget의 생명주기
StatelessWidget은 이름 그대로 상태(State)가 없는 위젯입니다.
한 번 생성되면 변경되지 않으며, 다음 단계만 거칩니다.
build()→ 화면 렌더링- 이후 상태 변경 불가
예를 들어, 단순한 텍스트나 아이콘 같은 고정 UI에 적합합니다.
class HelloText extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text('Hello Flutter!');
}
}
StatefulWidget의 생명주기
StatefulWidget은 상태가 변할 수 있는 위젯입니다.
이 위젯은 State 객체를 가지며, 다음과 같은 생명주기 단계를 거칩니다.
createState()
State 객체를 생성합니다. 위젯이 처음 화면에 등장할 때 한 번만 호출됩니다.
initState()
초기화 로직을 처리합니다. 예를 들어, API 요청이나 컨트롤러 초기화 등을 수행합니다.
⚡
super.initState()는 반드시 호출해야 합니다.
build()
UI를 렌더링하는 단계입니다. 상태가 변경되면 이 메서드가 다시 호출되어 화면을 갱신합니다.
didUpdateWidget()
부모 위젯이 변경되었을 때 호출되어, 위젯 상태를 새로 동기화합니다.
deactivate()
위젯이 위젯 트리에서 제거되기 전에 호출됩니다.
dispose()
리소스 해제 단계입니다. 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();
}
}
Flutter 생명주기의 활용 포인트
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 생명주기를 알면 코드가 달라진다
Flutter 생명주기는 단순히 위젯이 만들어지고 사라지는 과정이 아닙니다.
앱 성능, 리소스 효율성, 상태 관리의 핵심이 되는 로직입니다.
초보 개발자라면 initState → build → dispose 순서를 명확히 익히는 것부터 시작해보세요.
이 구조를 이해하면 상태 관리 패턴(Provider, BLoC, Riverpod) 도 훨씬 자연스럽게 익힐 수 있습니다.
결론
Flutter 생명주기는 앱의 안정성과 성능을 결정짓는 핵심 개념입니다.
위젯의 생성부터 소멸까지의 흐름을 정확히 이해하면, Flutter 개발의 효율성과 유지보수성이 극대화됩니다.
지금 바로 자신의 코드에서 initState, build, dispose가 어떻게 작동하는지 점검해보세요.