๊ฐœ๋ฐœ ์ง€์‹/CS ์ง€์‹

๐Ÿ–ฅ๏ธ ์ปดํŒŒ์ผ / ํŠธ๋žœ์ŠคํŒŒ์ผ / ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋น„๊ต ์‰ฝ๊ฒŒ ์„ค๋ช…

์ธํŒŒ_ 2022. 8. 14. 10:19

transpile-compile-interpreter

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

ํ•œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ปดํŒŒ์ผ์ด๋‹ค.

C์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ, Java๋ฅผ Bytecode๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ ๋ชจ๋‘ ์ด ์ •์˜์— ๋”ฐ๋ฅด๋ฉด Compile์— ํ•ด๋‹นํ•œ๋‹ค.

์‹ฌ์ง€์–ด TypeScript๋ฅผ JavaScript๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ ์—ญ์‹œ ์ด ๋ฒ”์ฃผ์•ˆ์— ์†ํ•œ ๋‹ค๊ณ  ํ• ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. (์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋’ค์—์„œ ๋ฐฐ์šธ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์ด๋‹ค)

  • C → Assembly
  • Java → bytecode

Compile

๊ผญ ๊ณ ์ˆ˜์ค€์˜ ์–ธ์–ด๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ์€ ํ•œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์˜ฎ๊ธฐ๋Š” ์ผ ์ž์ฒด๋ฅผ ํ†ต์นญํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํŠธ๋žœ์ŠคํŒŒ์ผ (Transpile)

ํ•œ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”๋ฅผ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋žœ์ŠคํŒŒ์ผ์ด๋‹ค.

Transpile์€ Compile์˜ Subset์ธ๋ฐ, ์ถ”์ƒํ™” ์ •๋„๊ฐ€ ์œ ์‚ฌํ•œ ์–ธ์–ด๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ Compileํ•˜๋Š” ๊ฒƒ์„ ํŠน๋ณ„ํžˆ Transpile์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋†’์€ ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ, IE ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋‚ฎ์€ ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Babel๋„ ์ด ๋ฒ”์ฃผ์— ์†ํ•œ๋‹ค.

Transpile

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ฒƒ ์—ญ์‹œ ์—„๋ฐ€ํžˆ ๋”ฐ์ง€์ž๋ฉด ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง ์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํŠธ๋žœ์Šค ํŒŒ์ผ๋Ÿฌ๋Š” Babel, tsc(TypeScript Compiler), ESBuild๋“ฑ์ด ์žˆ๋‹ค.

  • C ++ → C
  • ES6 → ES5 (Babel)
  • typescript / coffeescript → Javascript 
  • sass / scss → css

Transpile


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

์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)๋Š” ์‚ฌ๋žŒ์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฌ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์”ฉ ์ฆ‰์‹œ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋ฒˆ์—ญ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ๋Š” print('hello') ๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ์—”ํ„ฐ(Enter)๋ฅผ ์น˜๋Š” ์ˆœ๊ฐ„ ์ปดํ“จํ„ฐ ๊ธฐ๊ณ„์–ธ์–ด๋กœ ๋ฒˆ์—ญ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ฆ‰๊ฐ์ ์ธ ๋ฒˆ์—ญ์— ํŠนํ™”๋œ ๋ฒˆ์—ญ๊ธฐ๋กœ ๋ฒˆ์—ญ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ ์œผ๋กœ๋Š” ํ•œ ์ค„ ์ž‘์„ฑํ•˜๊ณ  ์—”ํ„ฐ์น  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๋ฒˆ์—ญ์„ ํ•˜๋‹ˆ, ํ”„๋กœ๊ทธ๋žจ์„ ๋งค๋ฒˆ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ๋Š๋ฆฌ๊ฒŒ ๋œ๋‹ค.

Interpreter


์ปดํŒŒ์ผ๋Ÿฌ vs ์ธํ„ฐํ”„๋ฆฌํ„ฐ

์ธ๊ฐ„์ด ์ฝ๊ธฐ ํŽธํ•œ ๊ณ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜์žˆ๊ฒŒ ์ €์ˆ˜์ค€์˜ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€ํ‘œ์ ์œผ๋กœ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค.

์œ„์—์„œ ๋‹ค๋ฃฌ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์ด ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด๋‹ค.

 

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์ด๋ฅผ ๋ชจ๋‘ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.

์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ฐœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ดˆ๊ธฐ ์Šค์บ” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ํ•˜์ง€๋งŒ ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„๋งŒ ๋”ฐ์ง€๊ณ  ๋ณด๋ฉด ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•œ ํ›„์— ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ์ „์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด๋กœ C,C++,JAVA ๋“ฑ์ด ์žˆ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ํ•œ ๋ฒˆ์— ํ•œ ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ณด๋‹ค ์‹คํ–‰์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๋‹ค.

๋˜ํ•œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ๊ณผ์ •์ด ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋‹ค๋ฅด๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ•œ๋ฒˆ์— ํ•œ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ํ•œ ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญ๋ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด๋ด์•ผ์ง€๋งŒ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ์ด ๊ฐ€๋Šฅํ•ด์„œ ์‚ฌ์šฉ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋ ์ˆ˜์žˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด๋กœ Python, Ruby, Javascript ๋“ฑ์ด ์žˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ vs ์ธํ„ฐํ”„๋ฆฌํ„ฐ

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ํŠน์ง• ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์ปดํŒŒ์ผ๋Ÿฌ(compiler)

  • ์ „์ฒด ํŒŒ์ผ์„ ์Šค์บ”ํ•˜์—ฌ ํ•œ๊บผ๋ฒˆ์— ๋ฒˆ์—ญ
  • ์ดˆ๊ธฐ ์Šค์บ”์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€๋งŒ, ํ•œ๋ฒˆ ์‹คํ–‰ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ณ  ๋‚˜๋ฉด ๋น ๋ฅด๋‹ค.
  • ๊ธฐ๊ณ„์–ด ๋ฒˆ์—ญ๊ณผ์ •์—์„œ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ „์ฒด ์ฝ”๋“œ๋ฅผ ์Šค์บ”ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์ „์— ์˜ค๋ฅ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

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

  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ํ•œ ๋ฒˆ์— ํ•œ ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ•œ๋‹ค.
  • ํ•œ๋ฒˆ์— ํ•œ๋ฌธ์žฅ์”ฉ ๋ฒˆ์—ญํ›„ ์‹คํ–‰ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋Š๋ฆฌ๋‹ค.
  • ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ข‹๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋‚˜์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฐ”๋กœ ์‹คํ–‰์„ ์ค‘์ง€ ์‹œํ‚จ๋‹ค. ์‹คํ–‰ ํ›„์— ์˜ค๋ฅ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ฑ์ด ๋ฌธ์ œ๊ฐ€ ๋ ์ˆ˜ ์žˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ vs ์ธํ„ฐํ”„๋ฆฌํ„ฐ


# ์ฐธ๊ณ ์ž๋ฃŒ

https://medium.com/nothing-but-the-objectivetruth/should-i-learn-an-interpreted-or-compiled-language-a59caf955778

https://www.sitesbay.com/cprogramming/c-compile-link-program

https://blog.sessionstack.com/how-javascript-works-the-internals-of-classes-and-inheritance-transpiling-in-babel-and-113612cdc220

https://www.sitepoint.com/understanding-asts-building-babel-plugin/

https://ko.meaniit.com/words/526