์ด๋ฒ๊ธ์์ ์์๋ณผ ๋ด์ฉ์ Flutter ์ ํต์ฌ ์ค ํต์ฌ์
๋๋ค. ๋ฐ๋ก ํ๋ฉด์ ๊ทธ๋ ค์ง ๋ชจ๋ ๊ฒ์ ์์ ฏ์ด๋ผ๋ ๊ฒ์ธ๋ฐ์. ์ง๊ธ๋ถํฐ ์์๋ณด๋๋ก ํฉ์๋ค. ์ด๋ฒ ๊ธ์ ์๋์ ์๋ฃ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์ต๋๋ค.
์ด ๊ธ์์ ์์๋ณผ ๋ด์ฉ
- ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๋ชจ๋ ๊ฒ์ด ์์ ฏ์ด๋ค
- ์ ์ธ์ UI ๋ฐฉ์๊ณผ Widget
- ์์ ฏ ํธ๋ฆฌ์ ๋ ์ด์์ ๊ตฌ์ฑ
- StatelessWidget
- StatefulWidget
ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๋ชจ๋ ๊ฒ์ด ์์ ฏ์ด๋ค
์์ ๊ทธ๋ฆผ์ Flutter๊ฐ UI๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์์๋ค์ ๊ณ์ธต์ ๋ํ๋ธ ๊ฒ ์ ๋๋ค. ๋งจ ์๋์ Text ์์ ฏ์ ๋ณด์๋ฉด ์ดํด๊ฐ ํจ์ฌ ํธํ ๊ฒ๋๋ค. Text ์์ ฏ์ ๋ง๊ทธ๋๋ก Flutter ์์ ํ๋ฉด์ ๊ธ์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํด๋์ค์ ๋๋ค. ์ด์ธ์๋ ๋ฒํผ์ ์ํ TextButton ์์ ฏ, ์์ด์ฝ์ ๋ํ๋ด๊ธฐ ์ํ Icon ์์ ฏ, ๊ธ์๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํ TextInput ์์ ฏ ๋ฑ UI๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์์๋ค์ด ๋ง์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ์์ ฏ๋ค์ StatelssWidget, StatefulWidget, etc(RenderObjectWidget, ProxyWidget, etc...) ์ผ๋ก ๋๋๊ณ ๊ฒฐ๊ตญ์ ์ต์๋จ์๋ Widget ์ผ๋ก ๋ฌถ์ ๋๋ค. ์ฆ ๊ฒฐ๊ตญ UI๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์์๋ค์ ํต์ฌ์ Widget ์ ๋๋ค. Widget์ด ๋๋์ฒด ๋ฌด์์ธ์ง ๋ค์ ๋ชฉ์ฐจ์์ ์์๋ณด๋๋ก ํฉ์๋ค.
์ ์ธ์ UI ๋ฐฉ์๊ณผ Widget
๊ธฐ์กด์ Android, IOS์์๋ ๋ช ๋ นํ UI ๋ฐฉ์(imperative style of UI)์ ํตํด UI๋ฅผ ์์ฑํด์์ต๋๋ค. ํ์ง๋ง Flutter์์๋ React Native์ ๊ฐ์ ์ ์ธ์ UI(declarative style of UI) ๋ฐฉ์์ ์ฑํํ๊ณ ์์ต๋๋ค. ์ ์ธ์ UI ๋ฐฉ์์ด๋ UI ๊ฐ์ฒด๋ฅผ ์ง์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ UI์ ์ค๋ช ๋ง ์์ฑํ๋ ๋ฐฉ์์ ๋ปํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ๋ ์์ํฌ๊ฐ Render Object๋ฅผ ํตํด UI๊ฐ์ฒด ์์ฑ๊ณผ ์ ์ง๋ฅผ ๋ค์์ ๊ด๋ฆฌํด์ค๋๋ค. ์ฆ ์ฐ๋ฆฌ๋ UI ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์ ์ง๋๋ ์ธ์ธํ ์์ ์ ๋ชฐ๋ผ๋ ๋๋ค๋ ๊ฒ ์ ๋๋ค. UI์ ๋ํ ์ค๋ช ์ ์์ฑํ๋ฉด ํ๋ ์์ํฌ๊ฐ ๋๋จธ์ง๋ ์์์ ๊ด๋ฆฌ ํด์ค๋๋ค. ํ์ง๋ง ํ๋ ์์ํฌ๊ฐ UI๊ฐ์ฒด ์์ฑ๊ณผ ์ ์ง๋ฅผ ๊ด๋ฆฌ ํด์ฃผ๊ธฐ ๋๋ฌธ์ UI ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. UI ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ณ๊ฒฝ์ฌํญ์ ํ๋ ์์ํฌ์ ์ ๋ฌํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฌ์์ฑํด์ผ ํฉ๋๋ค.
์ด์ ์ด ๋ด์ฉ๋ค์ Flutter์ ๋์ ํด์ ์ดํดํด๋ณด๋๋ก ํฉ์๋ค. ๊ฐ์ฅ ๋จผ์ UI์ ์ค๋ช ์ด ๋ฐ๋ก Widget ์ ๋๋ค. Widget์ ํตํด Flutter ํ๋ ์์ํฌ๊ฐ ์๋์ผ๋ก UI๊ฐ์ฒด ์์ฑ๊ณผ ์ ์ง๋ฅผ ํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ UI ๋ณ๊ฒฝ์ ์ํด ๊ณ ์๋๊ฒ์ด Widget์ Stateless, Stateful ๋ ๊ฐ์ง๋ก ๋๋๋ ๊ฒ ์ ๋๋ค. ์ด ๋ ์ข ๋ฅ์ค StatefulWidget์ ์ฌ์ฉํ๋ฉด setState() ํจ์๋ฅผ ํตํด ์์ ฏ์ ๋ค์ ๊ทธ๋ฆฌ๋๋ก ํ๋ ์์ํฌ์ ์์ฒญํ ์ ์์ต๋๋ค.
์์ ฏ ํธ๋ฆฌ์ ๋ ์ด์์ ๊ตฌ์ฑ
์์ ๊ธ์ ํตํด์ ์ด๋ป๊ฒ UI ์ปดํฌ๋ํธ๊ฐ ๊ทธ๋ ค์ง๋์ง ์ดํดํ์ต๋๋ค. ์ด์ ๋ ์ด๋ป๊ฒ UI ์ปดํฌ๋ํธ๋ค์ ๋ฐฐ์นํ๋์ง ์ตํ์ผ ํฉ๋๋ค. Flutter๋ ์์ ฏํธ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ Widget๋ค์ ๋ ์ด์์์ ๊ตฌ์ฑํฉ๋๋ค. ์๋จ์ ์ฌ์ง์ ๋ณด์๋ฉด Row, Column๊ณผ ๊ฐ์ Widget๋ค์ด ๋ณด์ด์ค ๊ฒ๋๋ค. ํด๋น ์์ ฏ๋ค์ ๊ฐ๊ฐ ์์ ์ ์์๋ค์ ํ, ์ด์ผ๋ก ๋ฐฐ์นํ๋๋ก ํ๊ฒํ๋ ์์ ฏ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ ํํ๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ค๋ฉด ์๋์ ํ๋ฉด์ด ๋์ฌ ๊ฒ๋๋ค.
์ด๋ ๋ฏ Flutter์์๋ Widget Tree๋ฅผ ์ด์ฉํ์ฌ ๋ ์ด์์์ ๊ตฌ์ถํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Flutter๋ ๋ ์ด์์์ ๊ตฌ์ถํ๋๋ฐ ๋์์ด ๋๋ ์์ ฏ๋ค์ ์ฌ๋ฌ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์์์ ํ์ธํ์ค ์ ์๋ Row, Column ๋ฑ์ ๋ฌผ๋ก ์ด๊ณ Flex, Stack, etc.. ๋ฑ ๋ค์ํ ๋ ์ด์์์ ๊ตฌ์ถํ ์ ์๋ Widget๋ค์ด ์กด์ฌํฉ๋๋ค. ๋ฐ๋ผ์ Flutter๋ฅผ ๊ณต๋ถํ์ค๋ ๋ ์ด์์์ ๊ตฌ์ถํ๋ Widget์ ๊ณต๋ถํ์๋ฉด UI๋ฅผ ๊ตฌ์ถํ๋๋ฐ ํฐ ๋์์ ๋ฐ์ผ์ค ์ ์์๊ฒ๋๋ค.
StatelessWidget
์์์๋ ์ธ๊ธํ์์ง๋ง ๊ฒฐ๊ตญ Stateless, Stateful์ UI ๋ณ๊ฒฝ์ ๋์ํ๊ธฐ ์ํด ์ค๊ณ๋์ต๋๋ค. ๊ทธ ์ค์ Stateless๋ ๋ฒ์ญ๋๋ก ๋ณ๊ฒฝํ์ง ์๋ Widget์ ๋๋ค. ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๊ตณ์ด ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ์์๋ค์ด ์กด์ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋จ์ ์๋ ๋ก๊ณ ๋ผ๋์ง ์๋๋ฉด Title ๊ฐ์ ์์๋ค์ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ์์ต๋๋ค. ์ด๋ฐ ์น๊ตฌ๋ค์ ์ ๋ถ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ Widget์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋ถํ์ํ ์ผ์ด๋ฉฐ ๋นํจ์จ์ ์ธ ์ผ์ ๋๋ค. ๋ฐ๋ผ์ Flutter๋ StatelessWidget์ ํตํด ๋ณํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ํ๊ณ ์ต๋ํ ๋ง์ด ์ฌ์ฉํ๊ธธ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ํจ์จ์ ์ธ ์ธก๋ฉด์์ Stateless ๊ฐ Stateful ๋ณด๋ค ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๋ฌ๋ถ๋ค๋ ๊ฐ๋ฐํ ๋ ๋ฐ๋์ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒ์ด ์๋๋ผ๋ฉด StatelessWidget์ ํ์ฉํ์๊ธธ ๋ฐ๋ผ๊ฒ ์ต๋๋ค.
StatefulWidget
StatefulWidget์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋ ์ฌ์ฉํ๋ ์์ ฏ์ ๋๋ค. ์์ gif๋ฅผ ํ์ธํด๋ณด์๋ฉด ๊ฐ์ด๋ฐ Text๊ฐ ๋ฒํผ ํด๋ฆญ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. StatelessWidget์ผ๋ก๋ ์ ๋ ๋ถ๊ฐ๋ฅํ ๊ตฌํ์ ๋๋ค. ๋ฒํผ์ด ํด๋ฆญ๋ ๋๋ง๋ค StatefulWidget์ setState() ํจ์๋ฅผ ํธ์ถํ์ฌ UI ๊ฐ์ฒด๋ฅผ ์ฌ์์ฑํ๋ ๊ฒ ์ ๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ด ๋ง์ฝ UI ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ผ ํ๋ค๋ฉด StatefulWidget์ ์ฌ์ฉํ์๊ณ setState() ํจ์๋ฅผ ์ด์ฉํด UI๋ฅผ ์ ๋ฐ์ดํธ ํ์๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง ์์์ ๋ง์๋๋ ธ๋ค์ํผ ๋ฐ๋์ ํ์ํ ์ํฉ์์๋ง ์ฌ์ฉํ์๊ณ ์ฌ๋งํด์๋ StatelessWidget์ ์ฌ์ฉํ์๊ธธ ๊ถ์ฅ๋๋ฆฝ๋๋ค. ํนํ Widget Tree์์ ์ต๋ํ ํ๋จ์ ๋ฐฐ์น๋๋๋ก ์ค๊ณํ์๋๊ฒ ์ข์ต๋๋ค. StatefulWidget์ด ๋ค์ ์ฌ์์ฑํ๊ฒ ๋๋ฉด ํด๋น ์์ ฏ์ ์์๋ค๋ ๊ฐ์ด ์ฌ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ฐ์์ด ํฐ ๋น์ฉ์ ๋ญ๋นํ๊ฒ ๋ ์ ์์ต๋๋ค.
๋ง์น๋ฉด์
์ด๋ ๊ฒ Flutter UI๊ฐ ์ด๋ป๊ฒ Widget์ผ๋ก ๊ตฌ์ฑ๋๋์ง ์์๋ดค์ต๋๋ค. ์ ์ธ์ UI ๋ฐฉ์๊ณผ WidgetTree, StatefulWidget, StatelessWidget ์ ๋ํด ์ดํดํ์๊ณ ๊ฐ์ ๋ค๋ฉด ์ด๋ฒ ๊ธ์ ์ฑ๊ณตํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด ์ฌ๋ฌ๋ถ๋ค์ด Flutter ์ UI ๊ณต๋ถ๋ฅผ ํ๋ ๋ฐฉํฅ์ฑ์ด ๋์ฑ ๋ ๋ช ํํด์ง๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ค์ ๊ธ์ Flutter ์ ๋คํธ์ํฌ ํต์ ์ผ๋ก ๋์์ค๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
'Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flutter Widget #1 : ListView ์ดํด์ ์ฌ์ฉ๋ฐฉ๋ฒ (0) | 2022.03.05 |
---|---|
Flutter / Flutter GetX์ ๋ํด ์์๋ณด์ (0) | 2022.03.04 |
Flutter BLoC ๊ฟํ - 1ํ : BlocProvider ๋ฐฑ๋ฐฐ ์ฌ์ฉํ๊ธฐ (0) | 2022.01.21 |
Flutter ๊ธฐ์ด - 1ํ : Flutter ์ ๊ณผ๊ฑฐ, ํ์ฌ, ๋ฏธ๋ (0) | 2021.12.17 |
Flutter Web 1ํ : ๊ตฌ๊ธ ์ฝ๋๋ฉ ๊ตฌํ (0) | 2021.07.20 |