StatefulWidget의 State 객체는 생명주기를 가집니다 — 위젯이 생성되고 갱신되고 소멸될 때 호출되는 메서드의 시퀀스(initState, build, didUpdateWidget, dispose 등). 이를 이해하는 것은 리소스와 부수 효과(side effect)를 올바르게 관리하는 데 중요합니다.
StatefulWidget의 State 객체는 생명주기를 가집니다 — 위젯이 생성되고 갱신되고 소멸될 때 호출되는 메서드의 시퀀스(initState, build, didUpdateWidget, dispose 등). 이를 이해하는 것은 리소스와 부수 효과(side effect)를 올바르게 관리하는 데 중요합니다.
class _MyWidgetState extends State<MyWidget> {
@override
void initState() {
super.initState();
// State가 생성될 때 한 번 호출 → 초기화, 구독 시작,
// 초기 데이터 가져오기, 컨트롤러/리스너 설정
}
@override
Widget build(BuildContext context) {
// UI를 렌더링해야 할 때마다 호출 (자주) → 위젯 트리 반환
return Container();
}
@override
void didUpdateWidget(MyWidget oldWidget) {
super.didUpdateWidget(oldWidget);
// 부모가 새 구성으로 다시 빌드할 때 호출 → 변경된 입력에 반응
}
@override
void dispose() {
// State가 영구적으로 제거될 때 호출 → 정리:
// 구독 취소, 컨트롤러 dispose, stream 닫기 (누수 방지!)
super.dispose();
}
}
createState → initState (한 번) → build (여러 번) → [구성 변경 시 didUpdateWidget]
→ ... → dispose (한 번, 마지막에)
기타: didChangeDependencies (InheritedWidget 의존성이 변경될 때)
⚠️ dispose()는 정리에 결정적 — 정리에 실패하면 MEMORY LEAK / 버그 발생:
→ Stream 구독, Timer 취소; AnimationController, TextEditingController,
ScrollController dispose; StreamController 닫기
→ initState에서 시작한 리소스는 dispose에서 정리해야 함
→ 누수의 흔한 원인: 컨트롤러/구독 dispose를 잊는 것.
StatefulWidget 생명주기를 이해하는 것은 Flutter에서 리소스와 부수 효과를 올바르게 관리하는 데 중요하며, 따라서 가치 있는 실용 지식입니다.
State 객체의 생명주기 메서드는 특정 시점에 호출되며, 이를 올바르게 사용하는 것이 필수적입니다: initState(State가 생성될 때 한 번 호출 — 초기화하고, 초기 데이터를 가져오고, 구독을 시작하고, 컨트롤러/리스너를 설정하는 곳), build(UI가 렌더링될 때마다 호출되어 위젯 트리를 반환), didUpdateWidget(부모가 새 구성으로 다시 빌드할 때 호출, 변경된 입력에 반응하기 위함), dispose(State가 영구적으로 제거될 때 호출).
일반적인 흐름(createState → initState → build 반복 → dispose)을 이해하면 각각이 언제 실행되는지 명확해집니다.
가장 결정적으로, dispose가 정리에 필수적이라는 것을 이해하는 것은 중요한 실용 지식입니다: 리소스 정리(Stream 구독과 Timer 취소, AnimationController, TextEditingController, ScrollController dispose, StreamController 닫기)에 실패하면 메모리 누수와 버그가 발생합니다 — 그리고 컨트롤러와 구독을 dispose하는 것을 잊는 것은 Flutter 앱에서 흔한 실제 누수 원인입니다.
initState에서 리소스를 설정하고 dispose에서 정리하는 패턴은 올바르고 누수 없는 위젯을 작성하는 데 근본적입니다.
생명주기를 이해하면 적절한 초기화(initState에서), 변경에 반응(didUpdateWidget에서), 그리고 결정적으로 정리(dispose에서)가 가능해집니다.
리소스와 부수 효과를 올바르게 관리하는 것이 올바르고 누수 없는 Flutter 앱에 필수적이며, StatefulWidget 생명주기(특히 설정을 위한 initState와 정리를 위한 dispose)가 이를 위한 메커니즘이므로, StatefulWidget 생명주기를 이해하는 것 — 주요 메서드, 그 타이밍, 특히 누수 방지에서 dispose의 결정적 역할 — 은 올바른 stateful 위젯을 작성하는 데 중요하고 실용적으로 관련된 Flutter 지식이자, 흔한 실세계 Flutter 문제인 리소스 누수를 피하는 핵심 기술입니다.