애플리케이션의 사용자 인터페이스가 효과적으로 동작하도록 하기 위해서는 위젯의 생명주기를 이해하고 관리하는 것이 중요합니다. Flutter에서 위젯은 UI를 구성하는 기본 단위로, 상태 관리 방식에 따라 다양한 종류로 나눌 수 있습니다. 위젯의 생명주기를 이해하면 애플리케이션의 상태와 UI 업데이트를 효과적으로 처리할 수 있습니다.
Flutter에서는 위젯을 크게 두 가지로 나눌 수 있습니다: StatelessWidget
과 StatefulWidget
. 이들의 차이점은 "State"를 가지는지의 여부입니다. State는 위젯의 생명주기 동안 변할 수 있는 데이터를 의미합니다.
StatelessWidget
은 상태가 변하지 않는 위젯을 말합니다. 이러한 위젯은 초기 설정 값에 따라 UI를 그리며, 이후 상태 변경이 발생하지 않습니다. 주로 단순히 데이터를 표시하는 데 사용됩니다.
예시:
class MyStatelessWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Stateless Widget'),
),
body: Center(
child: Text('Hello, Stateless Widget!'),
),
);
}
}
StatefulWidget
은 상태가 변할 수 있는 위젯을 말합니다. 이러한 위젯은 상태가 변경될 때마다 UI를 갱신하며, 복잡한 상호작용을 처리하는 데 사용됩니다.
Stateful Widget의 생명주기는 여러 단계로 구성됩니다. 이를 통해 상태 변경과 UI 갱신이 효율적으로 관리됩니다.
createState:
createState() => _MyWidgetState();
_MyWidgetState
Constructor:
class _MyWidgetState extends State<MyWidget> {
_MyWidgetState() {
// 초기화 작업
}
}
initState:
super.initState()
를 호출해야 합니다.void initState() {
super.initState();
// 초기화 작업
}
initState
에서 Firebase 초기화, 애니메이션 컨트롤러 초기화 또는 소켓 연결을 설정할 수 있습니다.didChangeDependencies:
super.didChangeDependencies()
를 호출해야 합니다.void didChangeDependencies() {
super.didChangeDependencies();
// 종속성 변경 처리
}
build:
build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Widget'),
),
body: Center(
child: Text('Hello, World!'),
),
);
}
Widget
setState:
build
메서드를 다시 호출하여 UI를 갱신합니다.void _incrementCounter() {
setState(() {
_counter++;
});
}
didUpdateWidget:
super.didUpdateWidget(oldWidget)
을 호출해야 합니다.void didUpdateWidget(MyWidget oldWidget) {
super.didUpdateWidget(oldWidget);
// 위젯 변경 처리
}
deactivate:
super.deactivate()
를 호출해야 합니다.void deactivate() {
super.deactivate();
// 비활성화 작업
}
dispose:
super.dispose()
를 호출해야 합니다.void dispose() {
// 정리 작업
super.dispose();
}