์ „์ฒด Flutter ๊ฐ€์ด๋“œ

์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์ •๋ฆฌ๋œ Flutter ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๐ŸŽฏ Dart ์–ธ์–ด

๐ŸŽฏ

Dart ์†Œ๊ฐœ

Google์ด ๋งŒ๋“  ํด๋ผ์ด์–ธํŠธ ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

Dart๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Google์ด ์„ค๊ณ„ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด์ด๊ณ , ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ๊ณผ Null Safety, JIT+AOT ์ปดํŒŒ์ผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“

Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๋ณ€์ˆ˜ ์„ ์–ธ, ๋ฌธ์ž์—ด, ์—ฐ์‚ฐ์ž, Null Safety ๊ธฐ์ดˆ

Dart ํ”„๋กœ๊ทธ๋žจ์€ main()์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. var/final/const/late/dynamic ๋ณ€์ˆ˜ ์„ ์–ธ, ๋ฌธ์ž์—ด ๋ณด๊ฐ„, Null Safety(?/!/??), ์บ์Šค์ผ€์ด๋“œ(..) ์—ฐ์‚ฐ์ž ๋“ฑ ํ•ต์‹ฌ ๋ฌธ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”’

Dart ํƒ€์ž… ์‹œ์Šคํ…œ

์ •์  ํƒ€์ž…, ํƒ€์ž… ์ถ”๋ก , ์ œ๋„ค๋ฆญ, typedef

Dart๋Š” ์ •์  ํƒ€์ž… ์–ธ์–ด๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž… ์ถ”๋ก , is/as ์บ์ŠคํŒ…, ํƒ€์ž… ํ”„๋กœ๋ชจ์…˜, ์ œ๋„ค๋ฆญ, typedef ๋“ฑ ํƒ€์ž… ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๐Ÿ—๏ธ

Dart ํด๋ž˜์Šค & OOP

์ƒ์„ฑ์ž 5์ข…, ์ƒ์†, ์ธํ„ฐํŽ˜์ด์Šค, Mixin, ํŒฉํ† ๋ฆฌ ํŒจํ„ด

Dart๋Š” ์™„์ „ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. 5๊ฐ€์ง€ ์ƒ์„ฑ์ž, extends/implements/with๋ฅผ ํ™œ์šฉํ•œ ์ƒ์†ยท์ธํ„ฐํŽ˜์ด์ŠคยทMixin, ํŒฉํ† ๋ฆฌ ํŒจํ„ด์œผ๋กœ ์œ ์—ฐํ•œ ํด๋ž˜์Šค ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š

Dart ์ปฌ๋ ‰์…˜

List, Set, Map + ์Šคํ”„๋ ˆ๋“œ, ์ปฌ๋ ‰์…˜ for/if

Dart์˜ 3๋Œ€ ์ปฌ๋ ‰์…˜ โ€” List(์ˆœ์„œO, ์ค‘๋ณตO), Set(์ค‘๋ณตX, ์ง‘ํ•ฉ ์—ฐ์‚ฐ), Map(ํ‚ค-๊ฐ’ ์Œ). ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž, ์ปฌ๋ ‰์…˜ for/if, ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์œผ๋กœ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โณ

Dart ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Future, async/await, Stream, FutureBuilder

๋„คํŠธ์›Œํฌ ์š”์ฒญ, ํŒŒ์ผ I/O ๋“ฑ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์—์„œ UI๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Future(๋‹จ์ผ ๊ฒฐ๊ณผ)์™€ Stream(์—ฐ์† ์ด๋ฒคํŠธ), async/await๋กœ ๋น„๋™๊ธฐ๋ฅผ ๋™๊ธฐ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›ก๏ธ

Dart ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

try-catch-finally, on ํƒ€์ž…๋ณ„ ์ฒ˜๋ฆฌ, rethrow

Dart๋Š” Exception(๋ณต๊ตฌ ๊ฐ€๋Šฅ)๊ณผ Error(๋ณต๊ตฌ ๋ถˆ๊ฐ€)๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. try-catch-finally, on ํƒ€์ž…๋ณ„ ์ฒ˜๋ฆฌ, rethrow, ๋น„๋™๊ธฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Œ

Dart Extension

๊ธฐ์กด ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ/ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

Extension์€ ์›๋ณธ ์†Œ์Šค ์ˆ˜์ •์ด๋‚˜ ์ƒ์† ์—†์ด ๊ธฐ์กด ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œยทํ”„๋กœํผํ‹ฐยท์—ฐ์‚ฐ์ž๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. String์— capitalize, int์— isPrime, List์— distinct ๋“ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ

Dart Records & ํŒจํ„ด ๋งค์นญ

Dart 3.0 โ€” ๋‹ค์ค‘ ๊ฐ’ ๋ฐ˜ํ™˜, ๊ตฌ์กฐ ๋ถ„ํ•ด, switch ํŒจํ„ด

Dart 3.0์—์„œ ๋„์ž…๋œ Records๋Š” ํด๋ž˜์Šค ์—†์ด ์—ฌ๋Ÿฌ ๊ฐ’์„ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ถˆ๋ณ€ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ํŒจํ„ด ๋งค์นญ๊ณผ ๊ฒฐํ•ฉํ•˜๋ฉด switch/if-case์—์„œ ํƒ€์ž…๊ณผ ์กฐ๊ฑด์„ ๋™์‹œ์— ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽจ ์œ„์ ฏ & UI