๐ฅ๏ธ ์ปดํ์ผ / ํธ๋์คํ์ผ / ์ธํฐํ๋ฆฌํฐ ๋น๊ต ์ฝ๊ฒ ์ค๋ช
์ปดํ์ผ (Compile)
ํ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ณํํ๋ ๊ฒ์ด ์ปดํ์ผ์ด๋ค.
C์ธ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ์ฎ๊ธฐ๋ ๊ฒ, Java๋ฅผ Bytecode๋ก ์ฎ๊ธฐ๋ ๊ฒ ๋ชจ๋ ์ด ์ ์์ ๋ฐ๋ฅด๋ฉด Compile์ ํด๋นํ๋ค.
์ฌ์ง์ด TypeScript๋ฅผ JavaScript๋ก ์ฎ๊ธฐ๋ ๊ฒ ์ญ์ ์ด ๋ฒ์ฃผ์์ ์ํ ๋ค๊ณ ํ ์ ์๊ธฐ๋ ํ๋ค. (์๋ฐํ ๋งํ๋ฉด ๋ค์์ ๋ฐฐ์ธ ํธ๋์คํ์ผ๋ง์ด๋ค)
- C → Assembly
- Java → bytecode
๊ผญ ๊ณ ์์ค์ ์ธ์ด๋ฅผ ๋ฐ์ดํธ ๋จ์์ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ผ ์ปดํ์ผ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ค.
์ปดํ์ผ์ ํ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ์ฎ๊ธฐ๋ ์ผ ์์ฒด๋ฅผ ํต์นญํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
ํธ๋์คํ์ผ (Transpile)
ํ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋๋ฅผ ๋น์ทํ ์์ค์ ์ถ์ํ๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ์ธ์ด๋ก ๋ณํํ๋ ๊ฒ์ด ํธ๋์คํ์ผ์ด๋ค.
Transpile์ Compile์ Subset์ธ๋ฐ, ์ถ์ํ ์ ๋๊ฐ ์ ์ฌํ ์ธ์ด๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก Compileํ๋ ๊ฒ์ ํน๋ณํ Transpile์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์๋ฅผ๋ค์ด ๋์ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ, IE ํธํ์ฑ์ ์ํด ๋ฎ์ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ Babel๋ ์ด ๋ฒ์ฃผ์ ์ํ๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ ํ๋ ๊ฒ ์ญ์ ์๋ฐํ ๋ฐ์ง์๋ฉด ํธ๋์คํ์ผ๋ง ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋์์ผ๋ก ํ๋ ํธ๋์ค ํ์ผ๋ฌ๋ Babel, tsc(TypeScript Compiler), ESBuild๋ฑ์ด ์๋ค.
- C ++ → C
- ES6 → ES5 (Babel)
- typescript / coffeescript → Javascript
- sass / scss → css
์ธํฐํ๋ฆฌํฐ (Interpreter)
์ธํฐํ๋ฆฌํฐ(Interpreter)๋ ์ฌ๋์ด ์์๋ณด๊ธฐ ์ฌ์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑํ ์ฝ๋๋ฅผ ํ ์ค ์ฉ ์ฆ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ๋ฒ์ญ๊ธฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด ์ธํฐํ๋ฆฌํฐ์์๋ print('hello') ๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ์ํฐ(Enter)๋ฅผ ์น๋ ์๊ฐ ์ปดํจํฐ ๊ธฐ๊ณ์ธ์ด๋ก ๋ฒ์ญ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ด์ฒ๋ผ ์ธํฐํ๋ฆฌํฐ๋ ์ฆ๊ฐ์ ์ธ ๋ฒ์ญ์ ํนํ๋ ๋ฒ์ญ๊ธฐ๋ก ๋ฒ์ญ ์๋๊ฐ ๋น ๋ฅด๋ค. ํ์ง๋ง ๋จ์ ์ผ๋ก๋ ํ ์ค ์์ฑํ๊ณ ์ํฐ์น ๋๋ง๋ค ์๋กญ๊ฒ ๋ฒ์ญ์ ํ๋, ํ๋ก๊ทธ๋จ์ ๋งค๋ฒ ์คํํ๊ธฐ์๋ ๋๋ฆฌ๊ฒ ๋๋ค.
์ปดํ์ผ๋ฌ vs ์ธํฐํ๋ฆฌํฐ
์ธ๊ฐ์ด ์ฝ๊ธฐ ํธํ ๊ณ ์์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ฝ์ ์์๊ฒ ์ ์์ค์ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ธฐ ์ํด ๋ํ์ ์ผ๋ก 2๊ฐ์ง๊ฐ ์๋ค๊ณ ๋ณด๋ฉด๋๋ค.
์์์ ๋ค๋ฃฌ ์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ด ๋ฐ๋ก ๊ทธ๊ฒ์ด๋ค.
์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋จ ์ ์ฒด๋ฅผ ์ค์บํ์ฌ ์ด๋ฅผ ๋ชจ๋ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ค.
์ ์ฒด๋ฅผ ์ค์บํ๊ธฐ ๋๋ฌธ์ ๋๊ฐ ์ปดํ์ผ๋ฌ๋ ์ด๊ธฐ ์ค์บ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ์ ์ฒด ์คํ ์๊ฐ๋ง ๋ฐ์ง๊ณ ๋ณด๋ฉด ์ธํฐํ๋ฆฌํฐ ๋ณด๋ค ๋น ๋ฅด๋ค.
๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ๋ ์ ์ฒด ์ฝ๋๋ฅผ ๊ฒ์ฌํ ํ์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์คํ ์ ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌ ํ ์ ์๋ค.
๋ํ์ ์ธ ์ธ์ด๋ก C,C++,JAVA ๋ฑ์ด ์๋ค.
๋ฐ๋๋ก ์ธํฐํ๋ฆฌํฐ๋ ํ๋ก๊ทธ๋จ ์คํ์ ํ ๋ฒ์ ํ ๋ฌธ์ฅ์ฉ ๋ฒ์ญํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๋ฒ์ ์ ์ฒด๋ฅผ ์ค์บํ๊ณ ์คํํ์ผ์ ๋ง๋ค์ด์ ์คํํ๋ ์ปดํ์ผ๋ฌ๋ณด๋ค ์คํ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ์ธํฐํ๋ฆฌํฐ๋ ์ปดํ์ผ๋ฌ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค.
๋ํ ์ธํฐํ๋ฆฌํฐ๋ ์ค๋ฅ ๋ฉ์์ง ์์ฑ๊ณผ์ ์ด ์ปดํ์ผ๋ฌ์ ๋ค๋ฅด๋ค. ์ธํฐํ๋ฆฌํฐ๋ ํ๋ฒ์ ํ๋ฌธ์ฅ์ฉ ๋ฒ์ญํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ณ ํ ๋ฌธ์ฅ์ฉ ๋ฒ์ญ๋ ๋ ์ค๋ฅ๋ฅผ ๋ง๋๊ฒ ๋๋ฉด ๋ฐ๋ก ํ๋ก๊ทธ๋จ์ ์ค์งํ๊ฒ ๋๋ค. ๊ทธ๋์ ํ๋ก๊ทธ๋จ์ ์คํํด๋ด์ผ์ง๋ง ์ค๋ฅ ๋ฐ๊ฒฌ์ด ๊ฐ๋ฅํด์ ์ฌ์ฉ์ฑ์ ๋ฌธ์ ๊ฐ ๋ ์์๋ค.
๋ํ์ ์ธ ์ธ์ด๋ก Python, Ruby, Javascript ๋ฑ์ด ์๋ค.
์ปดํ์ผ๋ฌ์ ์ธํฐํ๋ฆฌํฐ์ ํน์ง ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ปดํ์ผ๋ฌ(compiler)
- ์ ์ฒด ํ์ผ์ ์ค์บํ์ฌ ํ๊บผ๋ฒ์ ๋ฒ์ญ
- ์ด๊ธฐ ์ค์บ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง, ํ๋ฒ ์คํ ํ์ผ์ด ๋ง๋ค์ด์ง๊ณ ๋๋ฉด ๋น ๋ฅด๋ค.
- ๊ธฐ๊ณ์ด ๋ฒ์ญ๊ณผ์ ์์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ์ฒด ์ฝ๋๋ฅผ ์ค์บํ๋ ๊ณผ์ ์์ ๋ชจ๋ ์ค๋ฅ๋ฅผ ํ๊บผ๋ฒ์ ์ถ๋ ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ ์คํ ์ ์ ์ค๋ฅ๋ฅผ ์ ์ ์๋ค.
์ธํฐํ๋ฆฌํฐ(interpreter)
- ํ๋ก๊ทธ๋จ ์คํ์ ํ ๋ฒ์ ํ ๋ฌธ์ฅ์ฉ ๋ฒ์ญํ๋ค.
- ํ๋ฒ์ ํ๋ฌธ์ฅ์ฉ ๋ฒ์ญํ ์คํ ์ํค๊ธฐ ๋๋ฌธ์ ์คํ ์๊ฐ์ด ๋๋ฆฌ๋ค.
- ์ปดํ์ผ๋ฌ์ ๊ฐ์ ์ค๋ธ์ ํธ ์ฝ๋ ์์ฑ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค.
- ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ณ ๋์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ๋ฐ๋ก ์คํ์ ์ค์ง ์ํจ๋ค. ์คํ ํ์ ์ค๋ฅ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ฑ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
# ์ฐธ๊ณ ์๋ฃ
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