ํด๊ทผ ํ '์ดํํฐ๋ธ ํ์ ์คํฌ๋ฆฝํธ'๋ฅผ ์ฝ๊ธฐ๋ก ํ์ง ํ๋ฃจ ๋ง์ ์ ๋ฅผ ๋ง์์ ๋ฌธ์ฅ์ด ์์์ต๋๋ค.
์ปดํ์ผ์ ํ์ ์ฒดํฌ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, ํ์ ์ค๋ฅ๊ฐ ์๋ ์ฝ๋๋ ์ปดํ์ผ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฉด์ ์ค๋นํ๋ฉด์ ๋์ถฉ์ ์์๋ ์ปดํ์ผ, ์ด์ ๋ ๋์ด์ ๋ชจ๋ฅธ์ฑ ๋์ด๊ฐ ์ ์์ด ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค.
์ํค๋ฐฑ๊ณผ๋ ์๋์ ๊ฐ์ด ๊ทธ ์๋ฏธ๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค.
ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฐ์ฌ ์๋ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฎ๊ธฐ๋ ์ธ์ด ๋ฒ์ญ ํ๋ก๊ทธ๋จ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
๊ณ ์์ค ์ธ์ด(High-Level Language) : ์ฌ๋์ด ์ดํดํ๊ธฐ ์ฌ์ด ์ธ์ด
์ ์์ค ์ธ์ด(Low-Level Language) : ๊ธฐ๊ณ๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ์ธ์ด
์ฌ๋์ด ๊ธฐ๊ณ์ด๋ก ๋ช
๋ น์ ๋ด๋ฆฌ๊ธฐ๋ ๋๋ฌด ์ด๋ ค์ด ์ผ์ด๋ผ์, ๊ณ ์์ค ์ธ์ด๋ก ๋ช
๋ น์ ๋ด๋ฆฐ ๋ค ๊ทธ ๋ช
๋ น์ ์ ์์ค ์ธ์ด๋ก ๋ณํํด์ฃผ๋ ์ผ์ข
์ ๋ฒ์ญ๊ธฐ
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ฃ .
์ฒ์์๋ ๊ธฐ๊ณ์ด์ ๊ฐ๊น์ด ์ด์
๋ธ๋ฆฌ์ด(Assembly Language)
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง ์ด์
๋ธ๋ฆฌ์ด๋ ์ปดํจํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ์ฌ์ฉํ๋ ๊ธฐ๊ณ์ด๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์, ๋น์ฉ์ด ๊ณ์ํด์ ์ฆ๊ฐํ๋ค๋ ํฐ ๋จ์ ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
์๋ํ๋ฉด ์ด์
๋ธ๋ฆฌ์ด๋ ๊ธฐ๊ณ์ด์ 1๋1๋ก ๋งค์นญ๋์๊ธฐ ๋๋ฌธ์ด์ฃ !
๋ฐ๋ผ์ ๊ณ ์์ค ์ธ์ด์ ํ์์ฑ์ด ๋๋ํ๊ณ , ์ด์ ๋ฐ๋ง์ถฐ ์ฌ๋ฌ ๊ณ ์์ค ์ธ์ด
๊ฐ ๋ฑ์ฅํ๊ธฐ ์์ํ์ต๋๋ค.
์ง๊ธ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ Python, Java, Javascript ๋ฑ์ ์ฌ๋ฌ ์ธ์ด๊ฐ ๋ฐ๋ก ๊ณ ์์ค ์ธ์ด์ ํด๋นํฉ๋๋ค.
Javascript๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๋งํ๋ ์ธํฐํ๋ฆฌํฐ๋ ๋ญ๊น์? ๊ทธ๋ฆฌ๊ณ ์ปดํ์ผ๋ฌ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋๊ฑธ๊น์?
์ฐ์ , ์ปดํ์ผ๋ฌ๊ฐ ์ผ์ข ์ ๋ฒ์ญ๊ธฐ์ธ ๊ฒ์ฒ๋ผ, ์ธํฐํ๋ฆฌํฐ๋ ๋ฒ์ญ๊ธฐ์ ํ ์ข ๋ฅ์ ๋๋ค.
์ปดํ์ผ๋ฌ๋ ์ ์ฒด์ ์ฝ๋๋ฅผ ํ ๋ฒ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ
ํ๋ ๋ฐ ๋ฐํด, ์ธํฐํ๋ฆฌํฐ๋ ํ ์ค์ฉ ๋ฒ์ญํ๋ฉฐ ๋์์ ์คํ
ํ๋ ํ๋ก๊ทธ๋จ์
๋๋ค. ํ๋ก ํธ์๋ ์ฃผ๋ก ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ Javascript์ Python์ด ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ์ธ์ด์
๋๋ค.
์ธํฐํ๋ฆฌํฐ๋ ๋ฒ์ญํ๋ ์ฝ๋๋ ๋ค์ ๋ฒ์ญํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ฒ์ญํ๋ ์ฝ๋๋ ๋ค์ ๋ฒ์ญํ์ง ์๋ ์ปดํ์ผ๋ฌ๋ณด๋ค ์คํ์๋๊ฐ ๋๋ฆด ์ ๋ฐ์ ์์ต๋๋ค. ํ์ง๋ง ํ ์ค์ฉ ๋ฒ์ญํ๊ณ ์คํํ๊ธฐ ๋๋ฌธ์, ์๋ฌ์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ฝ๊ณ ํ๋ก๊ทธ๋จ์ ์์ ์ด ์ฉ์ดํ๋ค
๋ ์ฅ์ ์ด ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด Javascript๋ ์ค์ง ์ธํฐํ๋ฆฌํฐ๋ง ์ฌ์ฉํ๋ ์ธ์ด์ผ๊น์? ์๋๋๋ค!
Javascript๊ฐ ์ ์ ๋ฐ์ ํ๊ณ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๊ธฐ ์์ํ๋ฉด์, ์ธํฐํ๋ฆฌํฐ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋๋๋์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ๊ธ์์๋ Javascript V8 ์์ง
์ ๊ฐ๋ฐํ๊ณ , ์ด ์์ง์ ์ํด Javascript๋ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์๋ก ๋ค๋ฅธ ๋ฒ์ญ๊ธฐ๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค๋ ๊ฑธ๊น์?
์ด ๋ถ๋ถ์ ์๋ ์ปดํ์ผ ๋จ๊ณ ์ค๋ช
ํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋๋, ํฌ๊ฒ ๋ค์ฏ ๊ฐ์ง์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์์ค ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ถํดํด ์์ ํ ํฐ(Token)
์ ๋ง๋ญ๋๋ค. ์ฌ๊ธฐ์ ํ ํฐ(Token)์ด๋ ๋ฌธ๋ฒ์ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ต์ํ์ ๋จ์๋ฅผ ๋งํฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์ ๋จ๊ณ์์ ์์ฑํ ํ ํฐ(Token)์ ๋ฐ์, ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ํ์ค ํธ๋ฆฌ(parse tree)
๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ค ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์์ค ์ฝ๋๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฃฐ์ ์ ๋ฐ๋ฅด๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
์ฌ๊ธฐ์ ํ์ค ํธ๋ฆฌ๋ AST(Abstract Syntax Tree)
, ์ฆ ์ถ์๊ตฌ๋ฌธํธ๋ฆฌ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ด ๋จ๊ณ์์๋ ์์ค ์ฝ๋์ ์๋ฏธ๋ฅผ ๋ถ์ํฉ๋๋ค. ์ด ๋, ๋ณ์๊ฐ ์๋ง๊ฒ ์ฌ์ฉ๋์๋์ง ๋ฑ์ ์ฒดํฌํ๋ ํ์
์ฒดํน(type checking)
์ด ์ผ์ด๋ฉ๋๋ค. ๋ํ ์ ์ธ๋์ง ์์ ๋ณ์์ ์ฌ์ฉ์ด๋ ์๋ชป๋ ํจ์ ์ฌ์ฉ ๋ฑ์ Semantic Error
๋ฅผ ์ฒดํฌํฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์ ๋จ๊ณ์์ ์์ฑํ ํ์ค ํธ๋ฆฌ๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ
ํฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ์ ๋จ๊ณ์์ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ , ์ต์ ํ
ํ์ฌ ์ฑ๋ฅ์ ํฅ์ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ๋งํ๋, Javascript๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ผ๋ ๋ง์ ์ฌ์ค์ผ๊น์?
Javascript๋ ์์ ์ ๊น ์ดํด๋ณด์๋ ์ธํฐํ๋ฆฌํฐ๋ฅผ ํตํด ๊ฑฐ์ณ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ๋ฉ๋๋ค.
๊ทธ ๊ณผ์ ์ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ ์ธํฐํ๋ฆฌํฐ๋ง ์ฌ์ฉํ๋ค๋ณด๋, ํ ์ค ํ ์ค ๋ฒ์ญํ๊ณ ์คํํ๋ ์ธํฐํ๋ฆฌํฐ์ ํน์ฑ์ ์ฑ๋ฅ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ผ์ ๊ตฌ๊ธ์ Javascript V8 ์์ง์ ์ผ๋ถ ์ปดํ์ผ๋ฌ๋ฅผ ๋์
ํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ฒ ๋ฉ๋๋ค.
์ ์ด๋ฏธ์ง์ ๊ณผ์ ์, ์ค๊ฐ์ ์ปดํ์ผ๋ฌ๋ฅผ ๋ถ์ฌ ์คํ๋๋ ์ฝ๋๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒ์ด์ฃ !
Profiler
๋ ์ธํฐํ๋ฆฌํฐ๋ฅผ ๊ด์ฐฐํ๋ฉด์ ์คํ๋๋ ์ฝ๋๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค๊ฐ, ๋ฐ๋ณต์คํํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ์ฝ๋๋ฅผ ์ปดํ์ผ๋ฌ์๊ฒ ๋ณด๋ด ์ค์๊ฐ ์ปดํ์ผํฉ๋๋ค.
์ด๋ ๊ฒ ํ์ํ ๋๋ง๋ค ์ปดํ์ผํ๋ ์ฝ๋๋ฅผ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ
๋ผ ํฉ๋๋ค. ์ด ๋ ์ปดํ์ผ๋ฌ๊ฐ ํ๋จํ์ ๋ ์ปดํ์ผํ์ง ์๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ํ๋จํ ์ฝ๋๋ Decompile
๊ณผ์ ์ ๊ฑฐ์ณ ๋ค์ ๋๋๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.
๋ฐ๋ผ์ Javascript๋
(์ฑ๋ฅ์ ์ํด ๋ถ๋ถ์ ์ผ๋ก ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋)
์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ปดํ์ผ๋ฌ, ๊ทธ๋ฆฌ๊ณ Javascript์์์ ์ปดํ์ผ๋ฌ๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
๋