๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dart/๊ธฐ์ดˆ

Dart ์ปดํŒŒ์ผ๋Ÿฌ

by ๋ฟŒ๋น„ 2024. 7. 31.
728x90

๐Ÿ”ฅ Dart web

  • Dart Web์€ JavaScript๋กœ ๊ตฌ๋™๋˜๋Š” ์›น ํ”Œ๋žซํผ์—์„œ Dart ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค 
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ Dart ์ฝ”๋“œ๋ฅผ ์›น ์‹คํ–‰ ํ™˜๊ฒฝ์ธ  javascript๋กœ ์ปดํŒŒ์ผํ•˜๊ณ , ์ด ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋œ๋‹ค(์˜ˆ: Chrome ๋‚ด๋ถ€์˜ V8 )
  •  ์›น ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Dart๋ฅผ JavaScript ๋˜๋Š” WebAssembly๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค

๐Ÿ”ฅ  Dart ์›น์—๋Š” ์„ธ ๊ฐ€์ง€ ์ปดํŒŒ์ผ ๋ชจ๋“œ๊ฐ€ ์žˆ๋‹ค

  • ๋น ๋ฅธ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ฆ๋ถ„ํ˜• JavaScript ๊ฐœ๋ฐœ ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค
  • Dart ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ณ , ์ปดํŒฉํŠธํ•˜๊ณ , ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ JavaScript๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ตœ์ ํ™” JavaScript ํ”„๋กœ๋•์…˜ ์ปดํŒŒ์ผ๋Ÿฌ. ์ด๋Ÿฌํ•œ ํšจ์œจ์„ฑ์€ dead-code ์ œ๊ฑฐ์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์—์„œ ๋‚˜์˜จ๋‹ค
  • Dart ์ฝ”๋“œ๋ฅผ ์ดˆ๊ณ ์† ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ WebAssembly GC ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ตœ์ ํ™” WebAssembly(WasmGC) ํ”„๋กœ๋•์…˜ ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค

๐Ÿ”ฅ Dart Native

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ Dart ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ CPU์˜ ์•„ํ‚คํ…์ฒ˜์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค
  • ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ๊ธฐ๊ธฐ๋ฅผ ํƒ€๊ฒŸ์œผ๋กœ ํ•˜๋Š” ์•ฑ์˜ ๊ฒฝ์šฐ JIT(Just-In-Time) ์ปดํŒŒ์ผ์„ ๊ฐ–์ถ˜ Dart VM๊ณผ ๋จธ์‹  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ AOT(Ahead-Of-Time) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค
  • ๊ฐœ๋ฐœ ์ค‘์— ๋น ๋ฅธ ๊ฐœ๋ฐœ์ž ์ฃผ๊ธฐ๋Š” ๋ฐ˜๋ณต์— ํ•„์ˆ˜์ ์ด๋‹ค. Dart VM์€ ์ฆ๋ถ„ ์žฌ์ปดํŒŒ์ผ(ํ•ซ ๋ฆฌ๋กœ๋“œ ๊ฐ€๋Šฅ), ๋ผ์ด๋ธŒ ๋ฉ”ํŠธ๋ฆญ ์ปฌ๋ ‰์…˜( DevTools ๊ตฌ๋™ ) ๋ฐ ํ’๋ถ€ํ•œ ๋””๋ฒ„๊น… ์ง€์›์„ ๊ฐ–์ถ˜ Just-in-Time ์ปดํŒŒ์ผ๋Ÿฌ(JIT)๋ฅผ ์ œ๊ณตํ•œ๋‹ค

๐Ÿ”ฅ just-in-time(JIT)

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค
  • DartVM(Virtual Machine)์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์‚ฌ์ดํด์ด ๋น ๋ฅด๊ณ  UI๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค
  • ๋Ÿฐํƒ€์ž„์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ด๋ฉฐ, Flutter๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Hot-reload๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋•๋ถ„์— ๊ฐ€๋Šฅํ•˜๋‹ค
  • ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ƒ๋จธ์‹ ์—์„œ ์ž‘๋™ํ•˜๊ณ  ์žˆ์–ด์„œ ์กฐ๊ธˆ ๋А๋ฆฌ๋‹ค
  • JIT๋Š” ํ›จ์”ฌ ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹คํ–‰ ์†๋„๋Š” ๋” ๋А๋ ค์ง„๋‹ค. ํŠนํžˆ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ ๋ถ„์„๊ณผ ์ปดํŒŒ์ผ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ์‹คํ–‰ ์†๋„๋ฅผ ๋А๋ฆฌ๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์„ ๋ฐฐํฌ(๋นŒ๋“œ) ํ•  ๋•Œ๋Š” ์ข‹์ง€ ์•Š๋‹ค

๐Ÿ”ฅ ahead-of-time (AOT)

  • ๊ฐœ๋ฐœ์ด ๋๋‚˜๊ณ  ์•ฑ์„ ๋ฐฐํฌ(๋นŒ๋“œ)ํ•  ๋•Œ ์‚ฌ์šฉ ํ•œ๋‹ค
  • ์ปดํŒŒ์ผ์„ ๋จผ์ € ํ•˜๊ณ , ๊ฒฐ๊ณผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ(CPU ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด)๋ฅผ ๋ฐฐํฌํ•œ๋‹ค
  • AOT๋กœ ์ปดํŒŒ์ผ๋œ ์•ฑ์€ ์ผ๊ด€๋˜๊ณ  ์งง์€ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ ์‹คํ–‰๋œ๋‹ค(์ด๋ฏธ ์ปดํŒŒ์ผ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค)
  • ๊ฐ๊ฐ์˜ ์•„ํ‚คํ…์ณ(iOS, Android, Window, Mac..) ๋”ฐ๋กœ๋”ฐ๋กœ  ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๋А๋ฆฌ๊ฒŒ ํ•ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„  ์ข‹์ง€ ์•Š๋‹ค 
๊ฒฐ๋ก 
๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ”๋กœ๋ฐ”๋กœ ํ™•์ธ/์ˆ˜์ •ํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๊ณ ,
์•ฑ์„ ๋ฐฐํฌ(๋นŒ๋“œ) ํ•  ๋•Œ๋Š” AOT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ๊ฐ์˜ CPU์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์„œ ๋ฐฐํฌ(๋นŒ๋“œ) ํ•ด์ค€๋‹ค

 


โ€ป Reference

https://dart.dev/overview

https://nomadcoders.co/ [๋…ธ๋งˆ๋“œ์ฝ”๋” ๊ฐ•์˜ ์ฐธ๊ณ ]

 

728x90

'Dart > ๊ธฐ์ดˆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dart ๊ธฐ์ดˆ] List, Map, Set  (0) 2024.07.31
[Dart ๊ธฐ์ดˆ] DATA TYPE  (0) 2024.07.31
[Dart ๊ธฐ์ดˆ] null safety  (0) 2024.07.31
[Dart ๊ธฐ์ดˆ] ๋ณ€์ˆ˜  (0) 2024.07.31
Flutter SDK ๋ž€?  (0) 2024.07.30