Dart 2.15 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฐ Flutter 2.8 ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Google์€ Dart 2.15 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ถœ์‹œ๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ๊ฐ•๋ ฅํ•œ ์ •์  ํƒ€์ดํ•‘์„ ์‚ฌ์šฉํ•˜์—ฌ Dart ์–ธ์–ด์˜ ์›๋ž˜ ๋ฒ„์ „๊ณผ ๋‹ค๋ฅธ ๊ทผ๋ณธ์ ์œผ๋กœ ์žฌ์„ค๊ณ„๋œ Dart 2 ๋ถ„๊ธฐ์˜ ๊ฐœ๋ฐœ์„ ๊ณ„์†ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์œ ํ˜•์€ ์ž๋™์œผ๋กœ ์ถ”๋ก ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ํ˜•์„ ์ง€์ •ํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ๋™์  ์œ ํ˜• ์ง€์ •์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฒ˜์Œ์— ์œ ํ˜•์ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ณ  ์ดํ›„์— ์—„๊ฒฉํ•œ ์œ ํ˜• ๊ฒ€์‚ฌ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Dart ์–ธ์–ด์˜ ํŠน์ง•:

  • JavaScript, C ๋ฐ Java ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ž์—ฐ์Šค๋Ÿฌ์šด ์นœ์ˆ™ํ•˜๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šด ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํœด๋Œ€์šฉ ์žฅ์น˜๋ถ€ํ„ฐ ๊ฐ•๋ ฅํ•œ ์„œ๋ฒ„๊นŒ์ง€ ๋ชจ๋“  ์ตœ์‹  ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹คํ–‰๊ณผ ๊ณ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ๋ฉ”์†Œ๋“œ ๋ฐ ๋ฐ์ดํ„ฐ์˜ ์บก์Šํ™” ๋ฐ ์žฌ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ.
  • ์œ ํ˜•์„ ์ง€์ •ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋””๋ฒ„๊น… ๋ฐ ์‹๋ณ„์ด ๋” ์‰ฌ์›Œ์ง€๊ณ , ์ฝ”๋“œ๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์ง€๊ณ  ์ฝ๊ธฐ ์‰ฌ์›Œ์ง€๋ฉฐ, ํƒ€์‚ฌ ๊ฐœ๋ฐœ์ž์˜ ์ˆ˜์ • ๋ฐ ๋ถ„์„์ด ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์›๋˜๋Š” ์œ ํ˜•์—๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํ•ด์‹œ, ๋ฐฐ์—ด ๋ฐ ๋ชฉ๋ก, ๋Œ€๊ธฐ์—ด, ์ˆซ์ž ๋ฐ ๋ฌธ์ž์—ด ์œ ํ˜•, ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ๊ฒฐ์ • ์œ ํ˜•, ์ •๊ทœ์‹(RegExp)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ž์‹ ๋งŒ์˜ ์œ ํ˜•์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ‘๋ ฌ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด isolate ์†์„ฑ์ด ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋Š” ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์žˆ๋Š” ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์—์„œ ์™„์ „ํžˆ ์‹คํ–‰๋˜๋ฉฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด ๊ธฐ๋ณธ ํ”„๋กœ์„ธ์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ทœ๋ชจ ์›น ํ”„๋กœ์ ํŠธ์˜ ์ง€์› ๋ฐ ๋””๋ฒ„๊น…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ œXNUMX์ž ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์„ ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ ํŒ€์— ๋งก๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰์‹œ ์ฝ”๋“œ ์ˆ˜์ •("ํŽธ์ง‘ ๋ฐ ๊ณ„์†")์ด ๊ฐ€๋Šฅํ•œ ๋™์  ๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น… ๋„๊ตฌ์˜ ๊ตฌํ˜„์„ ํฌํ•จํ•˜์—ฌ Dart ์–ธ์–ด ๊ฐœ๋ฐœ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ ์„ธํŠธ์ž…๋‹ˆ๋‹ค.
  • Dart ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด SDK, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž pub, ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ dart_analyzer, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŠธ, ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ DartPad ๋ฐ IntelliJ IDEA, WebStorm, Emacs, Sublime Text์šฉ Dart ์ง€์› ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. 2์™€ ๋น”.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํฌํ•จ๋œ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€๋Š” ์•ฝ 22๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋Š” pub ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Dart 2.15 ๋ฆด๋ฆฌ์Šค์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ž‘์—…์„ ๋น ๋ฅด๊ฒŒ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์—์„œ Dart ๋Ÿฐํƒ€์ž„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ CPU ์ฝ”์–ด์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ I/O, ํŒŒ์ผ ์“ฐ๊ธฐ ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹œ์ž‘(๊ฒฉ๋ฆฌ)ํ•˜๊ณ  ์„œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์™€ ๋™์‹œ์— ๋‹ค๋ฅธ CPU ์ฝ”์–ด์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋กœ ์ž‘์—…ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ฒด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ธˆ์ง€๋˜๋ฉฐ ํ•ธ๋“ค๋Ÿฌ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์—๋Š” ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ชจ๋ธ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    Dart 2.15์—๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์ธ ๊ฒฉ๋ฆฌ๋œ ๋ธ”๋ก ๊ทธ๋ฃน(๊ฒฉ๋ฆฌ ๊ทธ๋ฃน)์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ทธ๋ฃน์˜ ์ผ๋ถ€์ธ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์—์„œ ๋‹ค์–‘ํ•œ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณต์œ  ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ทธ๋ฃน์˜ ํ•ธ๋“ค๋Ÿฌ ๊ฐ„์— ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์กด ๊ทธ๋ฃน์—์„œ ์ถ”๊ฐ€ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 100๋ฐฐ ๋” ๋น ๋ฅด๋ฉฐ 10-100๋ฐฐ ๋” ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    ๊ทธ๋ฃน์˜ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๊ณต์œ  ์•ก์„ธ์Šค๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ทธ๋ฃน์€ ๊ณต์œ  ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ณต์‚ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š” ์—†์ด ํ•œ ๋ธ”๋ก์—์„œ ๋‹ค๋ฅธ ๋ธ”๋ก์œผ๋กœ ๊ฐœ์ฒด๋ฅผ ์ „์†กํ•˜๋Š” ์†๋„๋ฅผ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” ๋ณต์‚ฌ ์ž‘์—… ์—†์ด ์ƒ์œ„ ๊ฒฉ๋ฆฌ ๋ธ”๋ก์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด Isolate.exit()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•ธ๋“ค๋Ÿฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์†Œํ˜• ๋ฐ ์ค‘ํ˜• ๋ฉ”์‹œ์ง€๊ฐ€ ์•ฝ 8๋ฐฐ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. SendPort.send() ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฉ๋ฆฌ ๊ฐ„์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ฒด์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํ•จ์ˆ˜, ํด๋กœ์ € ๋ฐ ์Šคํƒ ์ถ”์ ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฐœ๋ณ„ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ(tear-off)์—์„œ ์ƒ์„ฑ์ž ์ฝ”๋“œ์—์„œ ์œ ์‚ฌํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋Œ€ํ•œ ์ œํ•œ์ด ์ œ๊ฑฐ๋˜์–ด Flutter ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ Text ์œ„์ ฏ์„ ํฌํ•จํ•˜๋Š” Column ์œ„์ ฏ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ".map()"์„ ํ˜ธ์ถœํ•˜๊ณ  Text ๊ฐ์ฒด์˜ Text.new ์ƒ์„ฑ์ž์— ํฌ์ธํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ ๊ฐ€๋Šฅ์„ฑ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ์ด ์•„๋‹Œ ๋ฉ”์„œ๋“œ์™€ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์™€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. T id (T ๊ฐ’) => ๊ฐ’; var intId = ID ; // "int Function(int) intId = id;" ๋Œ€์‹  ๋ฒ„์ „ 2.15์—์„œ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. const fo = ์•„์ด๋””; // ํ•จ์ˆ˜ ID์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. const c1 = fo ;
  • dart:core ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ด๊ฑฐํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด์ œ ".name" ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์—ด๊ฑฐํ˜• ๊ฐ’์—์„œ ๋ฌธ์ž์—ด ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ์ด๋ฆ„์œผ๋กœ ๊ฐ’์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ๊ฐ’ ์Œ์„ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. enum MyEnum { one , ๋‘˜, ์…‹ } void main() { print(MyEnum.one.name); // "XNUMX"์ด ์ธ์‡„๋ฉ๋‹ˆ๋‹ค. print(MyEnum.values.byName('two') == MyEnum.two); // "true"๊ฐ€ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ๋งต = MyEnum.values.asNameMap(); print(map['XNUMX'] == MyEnum.XNUMX); // "์ง„์‹ค". }
  • 64๋น„ํŠธ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์ฃผ์†Œ ์ง€์ •์— ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ(32GB ์ดํ•˜์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋จ) 4๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ํฌ์ธํ„ฐ๋ฅผ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ ์••์ถ• ๊ธฐ์ˆ ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ์ด๋Ÿฌํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํž™ ํฌ๊ธฐ๋ฅผ ์•ฝ 10% ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. Flutter SDK์—์„œ๋Š” ์ƒˆ ๋ชจ๋“œ๊ฐ€ Android์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฏธ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” iOS์—๋„ ํ™œ์„ฑํ™”๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • Dart SDK์—๋Š” ์ด์ „์— ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜์—ˆ๋˜ ๋””๋ฒ„๊น… ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ(DevTools)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • "dart pub" ๋ช…๋ น๊ณผ pub.dev ํŒจํ‚ค์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋„๊ตฌ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๊ธฐ๋ฐ€ ์ •๋ณด๊ฐ€ ์‹ค์ˆ˜๋กœ ๊ฒŒ์‹œ๋˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€์†์ ์ธ ํ†ตํ•ฉ ์‹œ์Šคํ…œ ๋ฐ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ํŒจํ‚ค์ง€ ๋‚ด์— ๋‚จ๊ฒจ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ˆ„์ถœ์ด ๊ฐ์ง€๋˜๋ฉด "dart pub ๊ฒŒ์‹œ" ๋ช…๋ น ์‹คํ–‰์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์˜คํƒ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๊ฒ€์‚ฌ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ํ—˜ํ•œ ์˜ค๋ฅ˜๋‚˜ ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ ์ด๋ฏธ ๊ฒŒ์‹œ๋œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ทจ์†Œํ•˜๋Š” ๊ธฐ๋Šฅ์ด pub.dev ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ˆ˜์ • ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์˜€์ง€๋งŒ ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š” ๊ธฐ์กด ๋ฆด๋ฆฌ์Šค๋ฅผ ์ทจ์†Œํ•˜๊ณ  ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ถ”๊ฐ€ ๋ฐฐํฌ๋ฅผ ์ค‘๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ˆ˜์ • ์‚ฌํ•ญ์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ •์‹ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ). ํ…Œ์ŠคํŠธ ๋ฒ„์ „์ด ์•„๋‹Œ ์‹ค์ˆ˜๋กœ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ์ทจ์†Œ ํ›„์—๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๋” ์ด์ƒ "pub get" ๋ฐ "pub ์—…๊ทธ๋ ˆ์ด๋“œ" ๋ช…๋ น์—์„œ ์‹๋ณ„๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋ฏธ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹ค์Œ์— "pub get"์ด ์‹คํ–‰๋  ๋•Œ ํŠน๋ณ„ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ‘œ์‹œ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ทจ์•ฝ์ (CVE-2021-22567)์— ๋Œ€ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • pub.dev oauth2021 ์•ก์„ธ์Šค ํ† ํฐ์„ ํ—ˆ์šฉํ•˜๋Š” ํƒ€์‚ฌ ์„œ๋ฒ„์— ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ ๋‹ค๋ฅธ pub.dev ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ (CVE-22568-2)์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ทจ์•ฝ์ ์€ ๋‚ด๋ถ€ ๋ฐ ํšŒ์‚ฌ ํŒจํ‚ค์ง€ ์„œ๋ฒ„๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pub.dev์—์„œ ํŒจํ‚ค์ง€๋งŒ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— React Native์˜ ๋Œ€์•ˆ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ๋‹จ์ผ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ iOS, Android, Windows, macOS ๋ฐ Linux ํ”Œ๋žซํผ์€ ๋ฌผ๋ก  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Google์—์„œ ๊ฐœ๋ฐœํ•œ Fuchsia ๋งˆ์ดํฌ๋กœ์ปค๋„ ์šด์˜ ์ฒด์ œ์šฉ ๋งž์ถค ์…ธ์€ Flutter๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ 2.8๊ฐœ์›” ๋™์•ˆ Google Play ์Šคํ† ์–ด์˜ Flutter 2 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜๊ฐ€ 200๋งŒ ๊ฐœ์—์„œ 375๋งŒ XNUMX์ฒœ ๊ฐœ๋กœ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋‘ ๋ฒˆ.

Flutter ์ฝ”๋“œ์˜ ์ฃผ์š” ๋ถ€๋ถ„์€ Dart ์–ธ์–ด๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์œ„ํ•œ ๋Ÿฐํƒ€์ž„ ์—”์ง„์€ C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ Flutter์˜ ๊ธฐ๋ณธ Dart ์–ธ์–ด ์™ธ์—๋„ Dart Foreign Function ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ C/C++ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋Œ€์ƒ ํ”Œ๋žซํผ์šฉ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ๋†’์€ ์‹คํ–‰ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฐ ๋ณ€๊ฒฝ ํ›„์— ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Dart๋Š” ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ซ ๋ฆฌ๋กœ๋“œ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Flutter ์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘์—๋Š” ๋ชจ๋ฐ”์ผ ์žฅ์น˜์˜ ์‹คํ–‰ ์†๋„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ์ตœ์ ํ™”๊ฐ€ ์ฃผ๋ชฉ๋ฉ๋‹ˆ๋‹ค. Firebase ๋ฐ Google Cloud์™€ ๊ฐ™์€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์•ฑ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. Google Ads ํ†ตํ•ฉ ๋„๊ตฌ๊ฐ€ ์•ˆ์ •ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์นด๋ฉ”๋ผ ๋ฐ ์›น ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ง€์›์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋„๊ตฌ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Firebase๋ฅผ ์‚ฌ์šฉํ•œ ์ธ์ฆ์„ ์œ„ํ•œ ์œ„์ ฏ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Flutter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2D ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ Flame ์—”์ง„์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€