๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ Mobile/ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ Day4

ํ”Œ๋Ÿฌํ„ฐ ์•ฑํ”„๋กœ๊ทธ๋ž˜๋ฐ Day4

์œ„์ ฏ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์•Œ๋ฉด ์–ธ์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„์ง€, ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด์ด ์‚ฌ๋ผ์งˆ ๋•Œ ์–ด๋–ค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€๋ฅผ ์ •๋ฆฌํ•ด์„œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์•ฑ์˜ ๋™์ž‘์ด๋‚˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค ์œ„์ ฏ์€ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐฑ์‹ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์—†๋‹ค.

์ฆ‰, ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋ชจ๋“  ๋กœ์ง์ด ์ข…๋ฃŒ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์Šคํ…Œ์ดํŠธํ’€ ์œ„์ ฏ์€ 10๋‹จ๊ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์žˆ๋‹ค.

์•ž์— ๋ถ™์€ ๋ฒˆํ˜ธ์ˆœ์œผ๋กœ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์ง„ํ–‰๋˜๋ฏ€๋กœ ์ˆœ์„œ๋„ ๋ˆˆ์—ฌ๊ฒจ๋ด์•ผ ํ•œ๋‹ค.

 

 

 

<์Šคํ…Œ์ดํŠธํ’€ ์œ„์ ฏ์˜ ์ƒ๋ช…์ฃผ๊ธฐ>

 

์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๋Š”  createState() ํ•จ์ˆ˜

๋จผ์ € StatefulWidget ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ createState() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ์ƒ๋ช…์ฃผ๊ธฐ ํ•จ์ˆ˜๋“ค์ด ํฌํ•จ๋œ State ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, ์œ„์ ฏ์˜ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ธ ๊ฒƒ์ด๋‹ค.

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
  }

 

 

 

 

 

์œ„์ ฏ์„ ํ™”๋ฉด์— ์žฅ์ฐฉํ•˜๋ฉด mounted == true

์ƒํƒœ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๊ณง๋ฐ”๋กœ mounted ์†์„ฑ์ด true๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

mounted ์†์„ฑ์ด true๋ผ๋Š” ๊ฒƒ์€ ์œ„์ ฏ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” buildContext ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

 

 

์œ„์ ฏ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” initState() ํ•จ์ˆ˜

 initState() ํ•จ์ˆ˜๋Š” ์œ„์ ฏ์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.

์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฒ˜์Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.

@override
initState() {
    super.initState();
    _getJsonData();
}

 

 

 

 

 

์˜์กด์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœํ•˜๋Š” didChangeDependencies() ํ•จ์ˆ˜

์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ์— ์˜์กดํ•˜๋Š” ์œ„์ ฏ์ด๋ผ๋ฉด ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ๊ผญ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. 

์ฃผ๋กœ ์ƒ์†๋ฐ›์€ ์œ„์ ฏ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ”ผ์ƒ์†์ž๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ˜ธ์ถœํ•œ๋‹ค.

 

 

 

 

 

ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” build() ํ•จ์ˆ˜

์ด ํ•จ์ˆ˜๋Š” Widget์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, ์œ„์ ฏ์„ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•œ๋‹ค. build() ํ•จ์ˆ˜์—์„œ ์œ„์ ฏ์„ ๋งŒ๋“ค๊ณ  ๋ฐ˜ํ™˜ํ•˜๋ฉด ํ™”๋ฉด์— ํ‘œ์‹œ๋œ๋‹ค. 

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.amber,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

 

 

 

 

 

์œ„์ ฏ์„ ๊ฐฑ์‹ ํ•˜๋Š” didUpdateWidget() ํ•จ์ˆ˜

๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์œ„์ ฏ์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•  ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.

 

 

 

 

 

์œ„์ ฏ์˜ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” setState() ํ•จ์ˆ˜

setState() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ณ  ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™”๋ฉด์˜ UI๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

์•ฑ์˜ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์ œ์ผ ๋งŽ์ด ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

void updateProfile(String name) {
	setState() => this.name = name);
}

 

 

 

 

 

์œ„์ ฏ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์ค‘์ง€ํ•˜๋Š” deactivate() ํ•จ์ˆ˜

deactivate() ํ•จ์ˆ˜๋Š” State ๊ฐ์ฒด๊ฐ€ ํ”Œ๋Ÿฌํ„ฐ์˜ ๊ตฌ์„ฑ ํŠธ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ œ๊ฑฐ๋  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.

๋‹ค๋งŒ, State ๊ฐ์ฒด๊ฐ€ ์ œ๊ฑฐ๋๋‹ค๊ณ  ํ•ด์„œ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ์ง€์›Œ์ง€์ง€๋Š” ์•Š๋Š”๋‹ค.

 

 

 

 

 

์œ„์ ฏ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์™„์ „ํžˆ ๋๋‚ด๋Š” dispose() ํ•จ์ˆ˜

State ๊ฐ์ฒด๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์†Œ๋ฉธํ•  ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.

์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ด์ œ ํ•ด๋‹น ์œ„์ ฏ์„ ์ข…๋ฃŒํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. 

 

 

 

 

 

์œ„์ ฏ์„ ํ™”๋ฉด์—์„œ ์ œ๊ฑฐํ•˜๋ฉด mounted == false

State ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธํ•˜๋ฉด ๋งˆ์ง€๋ง‰์œผ๋กœ mounted ์†์„ฑ์ด false๋กœ ๋˜๋ฉด์„œ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋๋‚œ๋‹ค.

 

 

 

 

 

์œ„์ ฏ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์š”์•ฝ

ํ˜ธ์ถœ ์ˆœ์„œ ์ƒ๋ช…์ฃผ๊ธฐ ๋‚ด์šฉ
1 createState() ์ฒ˜์Œ ์Šคํ…Œ์ดํŠธํ’€์„ ์‹œ์ž‘ํ•  ๋•Œ ํ˜ธ์ถœ
2 mounted == true createState() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด mounted๋Š” true
3 initState() State์—์„œ ์ œ์ผ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜.
State ์ƒ์„ฑ ํ›„ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ
4 didChangeDependencies initState() ํ˜ธ์ถœ ํ›„์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
5 build() ์œ„์ ฏ์„ ๋ Œ๋”๋งํ•˜๋Š” ํ•จ์ˆ˜. ์œ„์ ฏ์„ ๋ฐ˜ํ™˜
6 didUpdateWidget() ์œ„์ ฏ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
7 setState() ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ํ•จ์ˆ˜.
๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ UI์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”
8 deactivate() State๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ ํ˜ธ์ถœ
9 dispose() State๊ฐ€ ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœ
10 mounted == false ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„ mounted๊ฐ€ false๋กœ ๋จ

 

728x90