ํ์ ์คํฌ๋ฆฝํธ์ ํ์
2012๋ ๋ด๋งํฌ ์ถ์ MS ๊ฐ๋ฐ์ ์ค๋์ค ํ์ผ์ค๋ฒ๊ทธ๊ฐ ๋ง๋ฆ
C#์ ๋ง๋ ์ฌ๋์ด๋ผ TS์ C#์ด ์ ์ฌํ ์ ์ด ๊ฝค ์๋ค.

ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅํ


์ค๋ฅธ์ชฝ TS์๋ ๋ณ์์ ์ด๋ฆ ๋ค ์ฝ๋ก ๊ณผ ํจ๊ป ๋ณ์์ ํ์ ์ ์ ์ → ๋ณ์์ ํ์ ๊ณ ์
TS์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ

๊ทธ๋ฐ๋ฐ NodeJS ์ ๋ฑ์ฅ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ์์๋ง ์คํํ ์ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋์๋ ์คํ๊ฐ๋ฅํ๊ฒ ๋จ


→ ๋ณต์กํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ JS๋ก ๊ฐ๋ฐํ๋ค๋ณด๋, ์ ์ฐ์ฑ → ๋ฒ๊ทธ ๋ฐ์ ์ฆ๊ฐ, ํ๋ก๊ทธ๋จ ์์ ์ฑ ๋จ์ด์ง
๊ทธ๋์ js์ ๊ธฐ์กด ๋ฌธ๋ฒ์ ์ ์งํ ์ฑ ์์ ์ฑ๋ง ์ถ๊ฐ ํ๋ณด

JS์ ๋จ์ ๊ณผ TS์ ์ฅ์
ํ์ ์์คํ
ํ๋ก๊ทธ๋จ ์์ ๊ฐ๊ณผ ํํ์์ด ์ด๋ค ์ข ๋ฅ์ ํ ์ดํฐ(ํ์ )์ธ์ง ๊ตฌ๋ถํ๊ณ , ๊ทธ ํ์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉ๋๋์ง ๊ฒ์ฌํ๋ ๊ท์น์ ๋ชจ์
ํ์ ์์คํ ์ ์ข ๋ฅ
- ์ ์ ํ์ ์์คํ
- ๋์ ํ์ ์์คํ

๋์ ํ์ ์์คํ
๋ณ์์ ํ์ ์ ์ฝ๋๊ฐ ์คํ๋๋ ๋์ค์ ๊ฒฐ์
์ฅ์
- ์ฝ๋ ์์ฑ์ด ๋น ๋ฅด๊ณ ์ ์ฐ
- ์ด๊ธฐ ๊ฐ๋ฐ ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ์
- ์ํฉ์ ๋ฐ๋ผ ํ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๋ฆฌํฉํ ๋ง์ด๋ ์คํฌ๋ฆฝํ
์ ๊ฐํจ
- ์ฝ๋๊ฐ ๊ณ ์ ๋ ํ์ ์ ๋ฌถ์ด์ง ์์์
- ๋น ๋ฅธ ์คํ, ์์ , ๋๋ฒ๊น ์ด ๊ฐ๋ฅ
- ๊ทธ๋์ ๋ฐ์ดํฐ ๋ถ์, ์๋ํ ์คํฌ๋ฆฝํธ, ์น ํฌ๋กค๋ฌ ๊ฐ์
- ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ๊ฐ ํ์ํ ์์ ์์ ์์ฃผ ์ฐ์
- ํจ์ํ/๋ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐ
- ์คํ ์ค์ ์๋ก์ด ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์์

๋จ์
- ๋ฐํ์ ์๋ฌ๊ฐ ๋ง์ด ๋๋ค
- ์คํ์ ๋๋๋ฐ ์ค๋ฅ๊ฐ ๋จ → ์ฝ๋ ์คํ ์ ์ ์ค๋ฅ ๋ฐ๊ฒฌ ์ด๋ ค์

- ํ๋ก์ ํธ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค
- ๋ณ์ ํ์ ์ด ์ฝ๋ ์ค๊ฐ์ค๊ฐ ๋ฐ๋ ์ ์์ด์ ๋ณ์ ์ถ์ ์ ์ด๋ ค์
- ์ฑ๋ฅ์ด ๋๋ฆผ
- ์คํํ ๋๋ง๋ค ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ณ์ ํ์ ์ ๊ณ์ ํ์ธ → ์ ์ ํ์ ์ธ์ด๋ณด๋ค ๋๋ฆผ
์ ์ ํ์ ์์คํ

→ ์๋ํฐ ์์์ ๋ฐ๋ก ๋นจ๊ฐ์ค๋ก ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์
์ ์ ํ์ ์์คํ ์ ๋จ์
- ์ฝ๋ ์์ฑ์ด ๋ฒ๊ฑฐ๋กญ๊ณ
- ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค
- ๊ฐ๋ฐ ์ด๊ธฐ ์๋๊ฐ ๋๋ฆฌ๊ณ
- ๋ณต์กํ ํ์ ์ค๊ณ ํ์
ํ์ ์คํฌ๋ฆฝํธ์ ์ ์ง์ ํ์ดํ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ํ์ ์์คํ + ์๋ฐ์ ์ ์ ํ์ ์์คํ ํผํฉ
| ์๋ฐ์ ์ ์ ํ์ ์์คํ ์ฒ๋ผ | ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ํ์ ์์คํ ์ฒ๋ผ |
![]() |
![]() |
| ์ฌ์ ์ ์ค๋ฅ ๋ณด์ฌ์ค | ๋ชจ๋ ๋ณ์์ ์ผ์ผ์ด ์ง์ ํ์
๋ช
์ ์ํด๋ ๋จ → ๋ณ์์ ํ์ ์ ์ง์ ์ ์ํ์ง ์์๋ ๋ณ์์ ๋ด๊ธฐ๋ ์ด๊ธฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ํ์ ์ถ๋ก |
⇒ ์ ์ง์ ์ผ๋ก ํ์ ์ ๊ฒฐ์ ํ๋ค ⇒ ์ ์ง์ ํ์ ์์คํ

ํ์ ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ
์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋์์๋ฆฌ

์ผ๋ฐ์ ์ผ๋ก๋ ์ปดํจํฐ๊ฐ ์์๋ค์ ์ ์๊ฒ ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ๋ค.

์ด ๊ณผ์ ์์ ๋จผ์ AST ๋ผ๋ ์ถ์๋ฌธ๋ฒํธ๋ฆฌ๋ก ๋ณํํ๋ค.

์ด๋ฐ์์ผ๋ก AST ๋ก ๋ณํ
๊ทธ ํ ์ด AST ํธ๋ฆฌ๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํ ํ์ ์ข ๋ฃ๋๋ค.

function add(a, b) {
return a + b;
}
๋ฅผ AST๋ก ๋ง๋ค๋ฉด
FunctionDeclaration
โโโ Identifier: "add"
โโโ Parameters: [a, b]
โโโ BlockStatement
โโโ ReturnStatement
โโโ BinaryExpression (+)
โโโ Identifier: a
โโโ Identifier: b
// ์ด๋ค JavaScript ์ฐ์ฐ์๋ BinaryExpression์ผ๋ก ํํ
const expr1 = a + b; // BinaryExpression (+)
const expr2 = a - b; // BinaryExpression (-)
const expr3 = a * b; // BinaryExpression (*)
const expr4 = a ** b; // BinaryExpression (**)
const expr5 = a % b; // BinaryExpression (%)
const expr6 = a == b; // BinaryExpression (==)
const expr7 = a === b; // BinaryExpression (===)
const expr8 = a instanceof b; // BinaryExpression (instanceof)
const expr9 = a in b; // BinaryExpression (in)
์๋ ๊ทธ๋ฆผ์ฒ๋ผ AST ๊ฐ ์์ฑ๋๋ค.

ํ์ ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ

- ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ AST ํธ๋ฆฌ๋ก ๋ณํ
- ์๋๋ ๊ทธ ๋ค์ AST → ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ๋๋ฐ, TS๋ ์ด AST๋ฅผ ๋ณด๊ณ ์ฝ๋ ์์ ์ค๋ฅ๊ฐ ์๋์ง ๊ฒ์ฌํ๋ ํ์ ๊ฒ์ฌ๊ฐ ์ํ

๋ง์ฝ ํ์ ๊ฒ์ฌ ์ ํ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์ปดํ์ผ์ด ์ค๋จ
์ ์์ ์ธ ์ฝ๋๋ผ๋ฉด ํ์ ๊ฒ์ฌ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํต๊ณผํ๊ณ , ๊ทธ ๋ค์์ AST → ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ (๋ฐ์ดํธ ์ฝ๋๊ฐ ์๋)

์ดํ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก AST๋ฅผ ๋ง๋ ํ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํ

ํ์ ๊ฒ์ฌ๊ฐ ์๋ฃ๋ ํ ๋ณํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ํ์ ๊ด๋ จ ์ฝ๋๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง

๊ฒฐ๊ตญ ํ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑํ
ํ์ ๊ด๋ จ ์ฝ๋๋ค์ ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ๋ ๋ ์ฌ๋ผ์ง๊ฒ ๋์ด ํ๋ก๊ทธ๋จ ์คํ์ ์ํฅ X
์ฐธ๊ณ
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๊ฐํฉ๋๋ค - ํ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ก
ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ
ts.winterlood.com

