Widget
Flutter Is an open source framework for building beautiful, natively compiled, multi-platform applications from a single codebase.
ํ๋ฌํฐ ๊ณต์ ํํ์ด์ง์ ์ฐ์ฌ์๋ ์๊ฐ๋ฌธ๊ตฌ์ด๋ค. ๋ง ๊ทธ๋๋ก ios, android ํ๋ซํผ์ ๋ชจ๋ ์ง์ํ๋ dart ์ธ์ด ๊ธฐ๋ฐ ์คํ์์ค ํ๋ ์ ์ํฌ์ด๋ค. ๋ฐ๋ผ์ ํ๋ฌํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์๋ dart ์ธ์ด์ ํ๋ ์์ํฌ ์์ฒด์ ๋ํ ์ดํด๋๊ฐ ํ์ํ๋ค.
๋จผ์ , ํ๋ฌํฐ์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ธ ์์ ฏ์ ๋ํด ๋ค๋ค๋ณด๋ คํ๋ค.
์์ ฏ์ ํ๋ฌํฐ ์ฑ์ UI๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ๋จ์์ด๋ค. React์ ์ปดํฌ๋ํธ์ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก, ์ด๋ค ์์ผ๋ก UI๋ฅผ ํ์ํ ์ง ๊ฒฐ์ ํ๋ค. ์ ์ํ ์ ์ ๋์ ๋ณด์ด๋ ์์๋ฟ๋ง ์๋๋ผ padding, row ๋ฑ ๋์ ๋ณด์ด์ง ์๋ ์์๊น์ง ๋ชจ๋ ์์ ฏ์ ํฌํจ๋๋ค.
์์ ฏ์ ์ํ์ ๋ฐ๋ผ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ์ํ๋, ์์ ฏ์ ์๋ช ์ฃผ๊ธฐ ์ํ๋ฅผ ๋งํ๋ค.

Stateless Widget
์ฑ์ด ๋์ํ๋ฉด์ ๋ณํ์ง ์๋ ์์ ฏ๋ค์ stateless widget์ด๋ผ๊ณ ํ๋ค. ์กฐ๊ธ ๋ ์์ธํ ๋งํ์๋ฉด, ์ ์ ์ ์ํธ์์ฉ ์์ด (์ฆ, ์ด๋ฒคํธ์ ์ํด ๋์ํ์ง ์๋๋ค.) ํ๋ฉด์ด ๋ ๋๋ง๋ ๋ ํ๋ฒ๋ง ๊ทธ๋ ค์ง๋ ์์ ฏ๋ค์ ๋งํ๋ค.
์๋ช ์ฃผ๊ธฐ ๋์ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์, ์ฒ์ ํ ๋น๋ฐ์ ๋ชจ์ต ๊ทธ๋๋ก UI๊ฐ ๊ทธ๋ ค์ง๋ค. (eg. Text Widget, Image Widget ...)
Stateful Widget
stateless widget๊ณผ ๋ฐ๋๋ก, ์ํ์ ๋ณ๊ฒฝ์ฌํญ์ ํตํด ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ ์์ ฏ์ ๋งํ๋ค. ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฐ์ ๋ฐ๋ผ UI๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ด๋ฒคํธ, ์ํธ์์ฉ์ ์ํด ๋์ํ๋ค. ์ ๋ ฅ์ฐฝ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ TextField๊ฐ ์์์ด๋ค.
์์ฝ : ์ํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด UI๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค๋ฉด? โก๏ธ stateful widget์ ์ฌ์ฉํ๋ค.
์ด์ด์, stateful widget์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ํ๋ฒ ์ดํด๋ณด์.
๋จผ์ , ์ฐ๋ฆฌ๊ฐ ์์ ฏ์ ํธ์ถํ ๋ class MyApp extends StatefulWidget
๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
์ฆ, StatefulWidget์ด๋ผ๋ ํด๋์ค๋ฅผ ์์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด StatefulWidget ํด๋์ค๋ ์ด๋ป๊ฒ ๋์ด์๋์ง ์ดํด๋ณผ ํ์๊ฐ ์๋ค. ์๋ ์ฝ๋๋ stateless widget๊ณผ stateful widget์ ๋ํ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด๋ค.
// stateless
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}
// stateful
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
stateless widget๊ณผ ๋ค๋ฅธ์ ์, ์์ ฏ ๋ด๋ถ์ createState() ๋ฉ์๋๋ฅผ ํตํด ์ด ์์ ฏ์ ์ํ๋ฅผ ์์ฑํ๊ณ ์๋ค๋ ์ ์ด๋ค.
์ด ๋ฉ์๋๋ stateful widget์ ํธ์ถํ ๋ ์คํ๋๋ฉฐ, ์ํ๋ฅผ ์์ฑํจ๊ณผ ๋์์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์์๋๋ค.
์ด ์์ ฏ์ด ํ๋ฉด์ ํ์๋๊ธฐ ์ํด์๋ ์์ฑ ์ดํ ์ด๊ธฐํ๋ฅผ ์คํํ๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค. ์ด ๋จ๊ณ๋ฅผ ์ด๊ธฐํ ๋จ๊ณ๋ผ๊ณ ๋งํ๋ฉฐ, initState() ๋ฉ์๋๋ฅผ ํตํด ์คํ๋๋ค.
๋ค์์ผ๋ก ๋น๋๋จ๊ณ๋ฅผ ํตํด ์์ ฏํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ฐํํ๋ฉฐ, ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, setState() ๋ฉ์๋๋ฅผ ํตํด ๋น๋๋ฅผ ๋ค์ ์คํํ๋ค. (์ํ ๋ณ๊ฒฝ ์ด์ธ์, ์์ ฏ์ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, didChangeDependencies() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.)
๋ง์ง๋ง์ผ๋ก, ๋์ด์ ์์ ฏ์ด ํ์ํ์ง ์์๋, dispose() ๋ฉ์๋๋ฅผ ํตํด ์์ ฏ์ ์ ๊ฑฐํ๊ณ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ข ๋ฃํ๋ค.
์์ฝํ์๋ฉด,
stateful ์์ฑ์ ํธ์ถ
createState๋ก ์ํ ์์ฑ
initState๋ฅผ ํตํด ์ํ ์ด๊ธฐํ
์์ ฏํธ๋ฆฌ ๋น๋, ๋ฐํ
์ด๋ฒคํธ๋ก ์ธํด ์ํ ๋ณ๊ฒฝ์ setState๋ฅผ ํธ์ถํด ๋ฆฌ๋น๋
์์ ฏ์ด ํ์ํ์ง ์๋ค๋ฉด, despose๋ฅผ ํตํด ์์ ฏ ์ญ์ .
์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค.
Last updated