์˜ค๋Š˜ ์ด์‹œ๊ฐ„์—๋Š” Future๋ฅผ UI๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

StatefulWidget + setState()

StatefulWidget์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ์œ„์ ฏ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์œ„์ ฏ์€ State ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. State ํด๋ž˜์Šค๋Š” StatefulWidget๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” setState() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ State ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  UI๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, setState() ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ Future๋‚˜ async/await์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ State ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  UI๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

StatelessWidget + FutureBuilder

StatelessWidget์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ์œ„์ ฏ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„์ ฏ์€ ์ฃผ๋กœ ์ •์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ๋ถ€๋ชจ ์œ„์ ฏ์œผ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. State ํด๋ž˜์Šค ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ๋Š” FutureBuilder ์œ„์ ฏ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FutureBuilder๋Š” Future ๊ฐ์ฒด์˜ ์™„๋ฃŒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ UI๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. FutureBuilder๋Š” future ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด Future ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค. Future ๊ฐ์ฒด๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด builder ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ UI๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

FutureBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Future ๊ฐ์ฒด์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋กœ๋”ฉ ์ค‘, ์—๋Ÿฌ, ์™„๋ฃŒ ๋“ฑ์˜ ์ƒํƒœ์— ๋งž๋Š” UI๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, StatefulWidget๊ณผ setState()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  UI๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. StatelessWidget๊ณผ FutureBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์™„๋ฃŒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ UI๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-07-08 แ„‹แ…ฉแ„Œแ…ฅแ†ซ 4.33.25.png

setState() ๋‹ค์‹œ ํ•œ๋ฒˆ ๋” ๊ณต๋ถ€ํ•˜๊ธฐ

**setState()**๋Š” ์ƒํƒœ(State)๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  UI๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. **setState()**๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•ด๋‹น ์œ„์ ฏ์˜ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ , Flutter ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๊ด€๋ จ๋œ ์œ„์ ฏ๋“ค์„ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter ์˜ˆ์‹œ',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter ์˜ˆ์‹œ'),
        ),
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  String _text = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(
          _text,
          style: TextStyle(fontSize: 24),
        ),
        FloatingActionButton(
          onPressed: () => setState(() => _text = 'Hello World!'),
          child: Icon(Icons.add),
        ),
      ],
    );
  }
}

**MyApp**์˜ build() ๋ฉ”์†Œ๋“œ์—์„œ๋Š” Scaffold ์œ„์ ฏ์„ ์ƒ์„ฑํ•˜๊ณ , **MyWidget**์„ Center ์œ„์ ฏ ๋‚ด์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  **MyWidget**์˜ build() ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ํ…์ŠคํŠธ ์œ„์ ฏ๊ณผ ํ”Œ๋กœํŒ… ์•ก์…˜ ๋ฒ„ํŠผ์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ๋Š” ๋นˆ ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ , ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค "Hello World!"๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ํ…์ŠคํŠธ ์œ„์ ฏ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.