Widget(μμ ―)
νλ©΄μ νμλλ λͺ¨λ UI μμ
νλ¬ν°λ μμ ―μ μ¬μ©νμ¬ λͺ¨λ°μΌ μ±, μΉ μ±, λ°μ€ν¬ν± μ± λ±μ κ°λ°ν μ μλ λ€λͺ©μ UI νλ μμν¬μ
λλ€. μμ ―μ UIλ₯Ό λΉλνκ³ λ μ΄μμμ μ μνλ©°, μ¬μ©μ μΈν°νμ΄μ€μ κ° λΆλΆμ ννν©λλ€.
State(μν)
νλ©΄μ κ°±μ νκΈ° μν΄μ μμ ―μμ κ΄λ¦¬νλ λ°μ΄ν°
μ±μ μνλ μ¬μ©μμμ μνΈ μμ©, λ°μ΄ν°μ λ³κ²½ λ±μ λ°λΌ λ³ν μ μμ΅λλ€. μνλ μ£Όλ‘ StatefulWidget ν΄λμ€ λ΄μ μ μλλ©°, ν΄λΉ ν΄λμ€λ₯Ό ν΅ν΄ μνλ₯Ό λ³κ²½νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
ex) μΉ΄μ΄ν° μ±
β’
+ λ²νΌμ λλ₯΄λ©΄ νλ©΄μ μ«μκ° 1μ© μ¦κ°ν©λλ€.
β’
νλ©΄μ μ«μκ° κ°±μ λκΈ° μν΄μ ν΄λΉ μμ ―μμ μ«μλ₯Ό state λ‘ κ΄λ¦¬ν©λλ€.
Widget Type (μμ ― νμ )
νλ¬ν°(Flutter)μμ μμ ―μ ν¬κ² λ κ°μ§ νμ
μΌλ‘ λλμ΄μ§λλ€.
- StatelessWidget
- StatefulWidget
StatelessWidget
μνκ° μλ μμ ―
StatelessWidgetμ μνλ₯Ό κ°μ§μ§ μλ μμ ―μ
λλ€. ν λ² μμ±λλ©΄ κ·Έ μνκ° λ³νμ§ μμΌλ©°, λ³κ²½λμ§ μλ μ μ μΈ UIλ₯Ό ꡬμ±νλ λ° μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, λ¨μν ν
μ€νΈ νμλ μ΄λ―Έμ§ λ±μ ν¬ν¨νλ μ μ μΈ νλ©΄μ λ§λ€ λ μ μ©ν©λλ€. StatelessWidgetμ build() λ©μλλ§μ ꡬννκ³ , μν λ³κ²½μ΄ νμνμ§ μμ λ μ¬μ©λ©λλ€.
class MyStatelessWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
child: Text('Hello, Stateless Widget!'),
);
}
}
Dart
볡μ¬
StatefulWidget
μνλ₯Ό κ°μ§λ μμ ―
StatefulWidgetμ μνλ₯Ό κ°μ§λ©°, μνμ λ³κ²½μ λ°λΌ UIλ₯Ό μ
λ°μ΄νΈν μ μλ μμ ―μ
λλ€. μ¬μ©μ μ
λ ₯, λ°μ΄ν° λ³κ²½ λ±μ λμνμ¬ λμ μΈ νλ©΄μ ꡬμ±ν λ μ¬μ©λ©λλ€. StatefulWidgetμ μνλ₯Ό κ΄λ¦¬νλ State ν΄λμ€λ₯Ό κ°μ§κ³ μμ΅λλ€. State ν΄λμ€λ μμ ―μ μλͺ
μ£ΌκΈ°μ ν¨κ» λμνμ¬ μνμ λ³κ²½ λ° κ΄λ¦¬λ₯Ό λ΄λΉν©λλ€.
class MyWidget extends StatefulWidget {
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int counter = 0;
void incrementCounter() {
setState(() {
counter++;
});
}
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter: $counter'),
ElevatedButton(
onPressed: incrementCounter,
child: Text('Increment'),
),
],
);
}
}
Dart
볡μ¬
Widget LifeCycle - μμ ― μλͺ μ£ΌκΈ°
μμ ―μ΄ μμ±, μΆλ ₯, μ κ±°λλ μΌλ ¨μ κ³Όμ
μλͺ
μ£ΌκΈ°(LifeCycle)λ?
: νλ‘κ·Έλλ°μμμ κ°μ²΄ λλ μμκ° μμ±, μΆλ ₯, κ°±μ , μλ©Έ λλ μΌλ ¨μ κ³Όμ μ λ§ν©λλ€.
μμ ―μ ν¬κ² Stateless Widget κ³Ό Stateful Widget μΌλ‘ λλμ΄ λ³Ό μ μλλ°, Stateless Widget μ μνκ° μκΈ° λλ¬Έμ, μμ ―μ λ€μ΄μλ λ°μ΄ν°κ° λ³κ²½λμ΄ λ€μ κ°±μ λλ μΌμ΄ μμ΅λλ€. κ·Έλ κΈ° λλ¬Έμ Statetless Widget μ UI λ λ¨μν μμ±λκ³ μΆλ ₯λκΈ°λ§ νμ¬ λ³λ€λ₯Έ μλͺ
μ£ΌκΈ°λ₯Ό κ°μ§ μμ΅λλ€.
Stateful Wiget μμ ―μ μμ±λΆν° μΆλ ₯ κ·Έλ¦¬κ³ λ€μ μνμ λ°λΌ κ°±μ λλ λ±, μΌλ ¨μ μλͺ
μ£ΌκΈ°λ₯Ό κ°μ΅λλ€. μλͺ
μ£ΌκΈ°μ κ³Όμ μ μ½κ² μ 리ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
1.
μν μμ±
2.
μν μ΄κΈ°ν
3.
μμ‘΄μ μν κ°±μ
4.
UI μΆλ ₯
5.
μμ ― κ°±μ
6.
μν κ°±μ
7.
μμ ― λΉνμ±ν
8.
μμ ― μλ©Έ
μμ ― μλͺ μ£ΌκΈ° μμ½
μλͺ
μ£ΌκΈ° | λ©μλ | μ€λͺ
|
μν μμ± | createState() | StatefulWidgetμ μνλ₯Ό μμ±νκ³ λ°ν |
μν μ΄κΈ°ν | initState() | - 1λ²λ§ νΈμΆ
- μ΄κΈ° μ€μ λ° λ°μ΄ν° μμ² μμ
μν |
μμ‘΄μ μν κ°±μ | didChangeDependencies() | initState() μ΄νμ νΈμΆλλ©°, ν΄λΉ StatefulWidgetμ΄λ μμ μμ ― νΈλ¦¬μμ μμ‘΄μ±μ΄ λ³κ²½λ λ νΈμΆ |
UI μΆλ ₯ | build() | νμν μμ ―(UI)λ₯Ό λ°ν |
μμ ― κ°±μ | didUpdateWidget() | μμ ―μ΄ μ
λ°μ΄νΈλ λ νΈμΆ, μλ‘μ΄ μμ±κ³Ό μ΄μ μμ±μ λΉκ΅νμ¬ νμν μμ
μ μν |
μν κ°±μ | setState() | - λ³κ²½λ μν ν΅μ§
- UIλ₯Ό κ°±μ |
μμ ― λΉνμ±ν | deactivate() | - μμ ―μ΄ νΈλ¦¬μμ λ²μ΄λλ©΄ νΈμΆ
- λΉνμ±ν μνλ‘ μ ν |
μμ ― μλ©Έ | dispose() | - μμ ―μ΄ μ κ±°λ λ νΈμΆ
- 리μμ€λ₯Ό ν΄μ νκ³ μ 리 μμ
μ μν |
μ£Όμ μλͺ μ£ΌκΈ° λ©μλ
β’
initState()
β’
build()
β’
setState()
initState()
StatefulWidget μ μνλ₯Ό μ΄κΈ°ννκΈ° μν΄, μ΅μ΄μ ν λ²λ§ νΈμΆλλ λ©μλ
β’
μ΄ λ©μλλ ν λ²λ§ νΈμΆλλ©°, μ£Όλ‘ μ΄κΈ°ν μμ
μ΄λ μν λ³μ μ΄κΈ°ν λ±μ μνν©λλ€.
β’
μλ₯Ό λ€μ΄, νΉμ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ΄κΈ° μνλ₯Ό μ€μ νλ λ° μ¬μ©λ©λλ€.
- μν μ΄κΈ°ν λ° μλ²λ‘μ λ°μ΄ν° μμ² λ±μ μ½λλ₯Ό μμ±ν©λλ€.
void initState() {
super.initState();
// μ΄κΈ°ν μμ
μν
// β
μλ²λ‘μ λ°μ΄ν° μμ²
}
Dart
볡μ¬
build()
μμ ―μ λ μ΄μμκ³Ό λμμΈμμ μ μνλ λ©μλ
- νλ©΄μ UI κ° μΆλ ₯λ λ νΈμΆ
β’
μ΄ λ©μλμμλ UIλ₯Ό μμ±νκ³ λ°ννλ μν μ ν©λλ€.
β’
build() λ©μλλ μνκ° λ³κ²½λ λλ§λ€ νΈμΆλλ©°, λ³κ²½λ μνμ λ°λΌ UIλ₯Ό μ
λ°μ΄νΈν©λλ€.
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My App'),
),
body: // UI κ΅¬μ± μμλ€...
),
);
}
Dart
볡μ¬
setState()
μμ ―μ μνλ₯Ό λ³κ²½μν€κ³ , UIλ₯Ό κ°±μ μ μμ²νλ λ©μλ
μ΄ λ©μλ λ΄μμ μν λ³μλ₯Ό λ³κ²½νκ³ , λ³κ²½ νμ UIλ₯Ό μ
λ°μ΄νΈνκ³ μ ν λ μ¬μ©λ©λλ€.
void _updateCounter() {
setState(() {
_counter++; // μν λ³μ λ³κ²½
});
}
Dart
볡μ¬
setState() λ©μλ λ΄λΆμμ μλ‘μ΄ μνλ‘ μ
λ°μ΄νΈλ λ³μλ₯Ό μ¬μ©νμ¬ UIλ₯Ό μ
λ°μ΄νΈνλ©΄, Flutterλ λ³κ²½λ μνμ λ°λΌ build() λ©μλλ₯Ό νΈμΆνμ¬ νλ©΄μ λ€μ 그립λλ€.