안드로이드 개발자라면 onCreate()
, onResume()
, onDestroy()
같은 생명주기 메서드에 익숙할 겁니다.
하지만 Flutter에서는 위젯 중심의 생명주기 개념이 완전히 다릅니다.
특히 StatefulWidget
일 때 위젯이 어떻게 생성되고, 업데이트되고, 제거되는지 이해하는 것이 핵심입니다.
🧱 StatelessWidget은 생명주기가 없다?
StatelessWidget
은 상태 변화가 없기 때문에, build()
외에는 특별한 생명주기 메서드가 없습니다.
정적인 화면을 구성할 때 주로 사용되며, 렌더링 한 번으로 끝납니다.
🔄 StatefulWidget의 생명주기 흐름
StatefulWidget의 전체 흐름은 아래와 같습니다:
createState()
initState()
didChangeDependencies()
build()
didUpdateWidget()
(위젯 변경 시)deactivate()
dispose()
🔍 각 메서드 설명
1️⃣ initState()
위젯이 처음 생성될 때 딱 한 번 호출됩니다. API 호출, Controller 생성 등 초기 설정 작업에 사용합니다.
@override
void initState() {
super.initState();
print("initState 호출됨");
}
2️⃣ didChangeDependencies()
InheritedWidget
이나 Provider
같은 의존성 데이터가 바뀔 때 호출됩니다.
initState 다음 호출되며, context 사용이 가능합니다.
3️⃣ build()
UI를 그리는 곳입니다. setState() 호출 시마다 재실행됩니다.
화면의 모습은 이 메서드의 반환값에 따라 결정됩니다.
4️⃣ didUpdateWidget()
부모 위젯이 현재 위젯을 재빌드할 때 호출됩니다.
예: MyWidget(title: "A")
→ MyWidget(title: "B")
로 변경된 경우
5️⃣ deactivate()
위젯이 위젯 트리에서 제거될 때 호출됩니다. (UI에서는 사라지지만, 메모리엔 남아 있음)
6️⃣ dispose()
위젯이 완전히 제거될 때 호출됩니다. Controller, Animation, Stream 등 해제 작업을 여기에 작성합니다.
@override
void dispose() {
myController.dispose();
super.dispose();
}
📊 요약: Android vs Flutter 생명주기 비교
Android | Flutter (StatefulWidget) |
---|---|
onCreate() | initState() |
onStart(), onResume() | didChangeDependencies() |
onDestroy() | dispose() |
setContentView() | build() |
💡 실제 디버깅 팁
다음 코드처럼 각 생명주기에 print를 넣어 보면, 위젯이 언제 다시 그려지는지 쉽게 알 수 있습니다.
@override
void initState() {
print("initState()");
super.initState();
}
@override
void build(BuildContext context) {
print("build()");
return Text('Hello');
}
@override
void dispose() {
print("dispose()");
super.dispose();
}
🔚 마무리
Flutter 생명주기는 Android와 달리 UI 중심이 아닌 상태 중심입니다.
StatefulWidget
을 제대로 다루기 위해서는 생명주기를 이해하고 활용하는 것이 필수입니다.
'개발일기' 카테고리의 다른 글
Flutter 라우팅 구조 이해하기: Navigator vs Jetpack Navigation (15) | 2025.06.03 |
---|---|
Dart 언어 입문: Java/Kotlin 개발자를 위한 빠른 이해 (19) | 2025.06.02 |
Flutter 위젯 구조 완전 정리: Stateless vs Stateful 차이 (7) | 2025.05.31 |
OPTIONS 요청이 왜 먼저 보내질까? Preflight 완전 정리 (8) | 2025.05.30 |
HTTP 쿠키 vs 세션 완전 정리: 개념, 차이점, 보안까지 (18) | 2025.05.29 |