compile vs interpret jihoon - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

์ธํ„ฐํ”„๋ฆฌํŠธ(Interpret)

  • ๊ณ ๊ธ‰ ์–ธ์–ด(high-level programiing language)๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค์ฝ”๋“œ(์›์‹œ์ฝ”๋“œ, ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ) ๋ช…๋ น์–ด๋“ค์„ ํ•œ ๋ฒˆ์— ํ•œ ์ค„์”ฉ ์ฝ์–ด๋“ค์—ฌ ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ, ๋ณ€ํ™˜ํ•œ ๊ฒƒ์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
  • ํ˜„๋Œ€์— ๋“ค์–ด ๋งŽ์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ JIT ์ปดํŒŒ์ผ ๋“ฑ์˜ ๊ธฐ์ˆ ๋กœ ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‚ฌ์ด์˜ ๊ธฐ์ˆ ์  ๊ตฌ๋ถ„์€ ์‚ฌ๋ผ์ ธ ๊ฐ€๋Š” ์ถ”์„ธ

์ปดํŒŒ์ผ(Compile)

  • ๊ณ ๊ธ‰ ์–ธ์–ด(high-level programming language)๋กœ ์ด๋ฃจ์–ด์ง„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ €๊ธ‰ ์–ธ์–ด(low-level programming language)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ
    • ์ €๋ ˆ๋ฒจ ์–ธ์–ด๋กœ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด(assembly language), ๊ธฐ๊ณ„์–ด(machine code)๊ฐ€ ์žˆ๋‹ค.
  • ๊ฒฐ๊ณผ ์ฝ”๋“œ๋ฅผ object code๋ผ๊ณ  ํ•œ๋‹ค.
    • E.g. java์˜ byte code(.class), C์˜ object code(.o)

๋งํฌ(link)

  • ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌ๋œ ์†Œ์Šค ํŒŒ์ผ๋“ค์˜ ์ปดํŒŒ์ผ๋œ ๊ฒฐ๊ณผ๋ฌผ๋“ค๋กœ ์ตœ์ข… ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…
    • A์™€ B ์†Œ์ŠคํŒŒ์ผ ๊ฐ๊ฐ์„ ์ปดํŒŒ์ผ๋งŒ ํ•˜๋ฉด A๊ฐ€ B์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— A์™€ B๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ •์  ๋งํฌ(static link)์™€ ๋™์  ๋งํฌ(dynamic link)๊ฐ€ ์žˆ๋‹ค.
    • ์ •์  ๋งํฌ(static link)
      • ์ปดํŒŒ์ผ๋œ ์†Œ์Šค ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•ด์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ณ 
    • ๋™์  ๋งํฌ(dynamic link)
      • ๋™์ ๋งํฌ๋ž€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘ ํ”„๋กœ๊ทธ๋žจ ์™ธ๋ถ€์— ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.
      • ์ž๋ฐ”์˜ ๊ฒฝ์šฐ, JVM์ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„์„œ ํด๋ž˜์ŠคํŒจ์Šค์— ๋กœ๋“œํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋™์  ๋งํฌ์˜ ์˜ˆ์ด๋‹ค.

๋นŒ๋“œ(Build)

  • ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฐ์ถœ๋ฌผ๋กœ ๋งŒ๋“œ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •
  • ๋นŒ๋“œ์˜ ๋‹จ๊ณ„ ์ค‘ ์ปดํŒŒ์ผ์ด ํฌํ•จ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ์€ ๋นŒ๋“œ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋นŒ๋“œ ๊ณผ์ •์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋ฅผ ๋นŒ๋“œ ํˆด์ด๋ผ ํ•œ๋‹ค.
    • E.g. ant, maven, gradle

JIT(Just In Time) ์ปดํŒŒ์ผ๋Ÿฌ

  • ์ค‘๊ฐ„ ์ฝ”๋“œ๋ฅผ OS์— ํŠนํ™”๋œ ์ฝ”๋“œ(machine code)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.
  • ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งค๋ฒˆ ํ•ด์„ํ•˜๋Š” ๋Œ€์‹  ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ์ธํ„ฐํ”„๋ฆฌํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ์ฝ”๋“œ๋ฅผ ์บ์‹ฑํ•˜๊ณ , ์บ์‹ฑ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋Š๋ฆฐ ์‹คํ–‰ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • Java์˜ ๊ฒฝ์šฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(machine code)๋กœ ๋ฐ”๊ฟ”๋‘”๋‹ค(์ปดํŒŒ์ผํ•œ๋‹ค). ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    image

byte ์ฝ”๋“œ

  • ํŠน์ • ํ•˜๋“œ์›จ์–ด๊ฐ€ ์•„๋‹Œ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์—์„œ ๋Œ์•„๊ฐ€๋Š” ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ์ด์ง„ ํ‘œํ˜„๋ฒ•
  • ์—ญ์‚ฌ์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น ์ง‘ํ•ฉ์ด 0๊ฐœ ์ด์ƒ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” 1๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋™์ž‘ ์ฝ”๋“œ(opcode)๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ผ ๋ถˆ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • java byte ์ฝ”๋“œ๋Š” java ์–ธ์–ด์™€ ๊ธฐ๊ณ„์–ด ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ์ฝ”๋“œ

reference