μ»΄νμΌλ¬
νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬(Typescript Compiler, TSC)
νμ
μ€ν¬λ¦½νΈλ μλ°μ€ν¬λ¦½νΈλ μλ° κ°μ μ£Όμ μΈμ΄μλ λ€λ₯Έ λ°©μμΌλ‘ λμ
νλ‘κ·Έλ¨μ νλ‘κ·Έλλ¨Έκ° μμ±ν λ€μμ ν
μ€νΈ νμΌλ‘ ꡬμ±λλ€.
<λ€λ₯Έ μΈμ΄>
ν
μ€νΈλ₯Ό μ»΄νμΌλ¬κ° νμ±νμ¬ μΆμ λ¬Έλ² νΈλ¦¬(abstract syntax tree, AST)λΌλ μλ£κ΅¬μ‘°λ‘ λ³ν
μ»΄νμΌλ¬κ° ASTλ₯Ό λ°μ΄νΈμ½λλ‘ λ³ν
λ°νμ νλ‘κ·Έλ¨μ 2μμ λ³νλ λ°μ΄νΈμ½λλ₯Ό μ
λ ₯, νκ° ν κ²°κ³Όμ»μ.
μ¦, νλ‘κ·Έλ¨ μ€νμ΄λ, μ»΄νμΌλ¬κ° μμ€ μ½λλ₯Ό νμ±ν΄ ASTλ‘ λ§λ€κ³ , λ€μ ASTλ₯Ό λ°μ΄νΈμ½λλ‘ λ³νν κ²μ λ°νμμ΄ νκ°νλλ‘ μ§μνλ κ²
<νμ
μ€ν¬λ¦½νΈ>
νμ
μ€ν¬λ¦½νΈλ μ»΄νμΌλ¬κ° μμ€ μ½λλ₯Ό μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³ννλ€(λ°μ΄νΈμ½λX).
νμ
μ€ν¬λ¦½νΈλ μ½λλ μΈμ μμ ν΄μ§λκ°.
νμ
μ€ν¬λ¦½νΈλ μ»΄νμΌ λ¨κ³μμ ASTλ₯Ό λ§λ€μ΄ κ²°κ³Ό μ½λλ₯Ό λ΄λκΈ° μ μ νμ
νμΈ κ³Όμ μ κ±°μΉλ€.
typechecker(νμ
κ²μ¬κΈ°) μ¬μ© : μ½λμ νμ
μμ μ±μ κ²μ¦νλ νλ‘κ·Έλ¨
μ΄ νμ
νμΈ λ¨κ³ λλΆμ νλ‘κ·Έλλ¨Έμ κΈ°λλλ‘ μ€μλ₯Ό λ°©μ§ν μ μλ€.
μ 체μ μΈ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌ κ³Όμ μ λ€μκ³Ό κ°λ€.
1~3μ TSC(νμ
μ€ν¬λ¦½νΈ μ»΄νμΌλ¬)
4~6μ λΈλΌμ°μ , nodeJs, κΈ°ν μλ°μ€ν¬λ¦½νΈ μμ§μμ μννλ€.
<μ 체μ μΈ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌ κ³Όμ >
TS μμ€λ₯Ό TSCκ° νμ±νμ¬ νμ
μ€ν¬λ¦½νΈ μΆμ λ¬Έλ² νΈλ¦¬(AST)λ‘ λ³ν : νμ
μ΄μ©λ¨
νμ
κ²μ¬κΈ°κ° ASTλ₯Ό νμΈ(νμ
μμ μ± ν보 ꡬκ°) : νμ
μ΄μ©λ¨
TSCκ° ASTλ₯Ό JS μμ€λ‘ μ»΄νμΌ(λ³ν) : λμ΄μ νμ
νμΈνμ§ μμ
JS μμ€κ° μλ°μ€ν¬λ¦½νΈ μΆμ λ¬Έλ² νΈλ¦¬(AST)λ‘ λ³ν
ASTλ₯Ό λ°μ΄νΈ μ½λλ‘ λ³ν
λ°νμ νλ‘κ·Έλ¨μ 5μμ λ³νλ λ°μ΄νΈμ½λλ₯Ό νκ°
1~3μ TSCκ° μννλ©°, 4~6μ λΈλΌμ°μ , NodeJS, κΈ°ν μλ°μ€ν¬λ¦½νΈ μμ§ λ±μμ μννλ€.
λ³΄ν΅ μλ°μ€ν¬λ¦½νΈ μ»΄νμΌλ¬μ λ°νμμ μμ§μ΄λΌλ νλμ νλ‘κ·Έλ¨μΌλ‘ ν©μ³μ§λ€.
νλ‘κ·Έλλ¨Έλ μ£Όλ‘ μ΄ μμ§κ³Ό μνΈμμ©νλ€. V8(NodeJS, ν¬λ‘¬, μ€νλΌμμ μ¬μ©),
μ€νμ΄λλͺ½ν€(νμ΄μ΄νμ€), JSCore(μ¬ν리), μ€ν¬λΌ(μ£μ§) λ±μ΄ μ΄μ²λΌ λμνλ©°
μλ°μ€ν¬λ¦½νΈκ° ν΄μλλ (interpreted) μΈμ΄μ λͺ¨μ΅μ κ°κ² λ§λ λ€.
κ³Όμ 1~2μμλ μμ€ μ½λμ μ¬μ©λ νμ
μ μ¬μ©νμ§λ§, κ³Όμ 3μμλ μ΄μ©νμ§ μλλ€.
μ¦, κ°λ°μκ° μ½λμ κΈ°μ
ν νμ
μ 보λ μ΅μ’
μ μΌλ‘ λ§λ€μ΄μ§λ νλ‘κ·Έλ¨μ μλ¬΄λ° μν₯μ μ£Όμ§ μμΌλ©°, λ¨μ§ 2λ² κ³Όμ κΉμ§ νμ
μ νμΈνλ λ°λ§ μ°μΈλ€.
νμ
μμ€ν
(type system)
νμ
κ²μ¬κΈ°κ° νλ‘κ·Έλ¨μ νμ
μ ν λΉνλ λ° μ¬μ©νλ κ·μΉ μ§ν©μ΄λ€.
νμ
μμ€ν
μλ μ¬μ©νλ λ³΄ν΅ 2κ°μ§ μ’
λ₯κ° μ‘΄μ¬
μ΄λ€ νμ
μ μ¬μ©νλμ§λ₯Ό μ»΄νμΌλ¬μ λͺ
μμ μΌλ‘ μλ €μ£Όλ νμ
μμ€ν
μλμΌλ‘ νμ
μ μΆλ‘ νλ νμ
μμ€ν
2κ°μ§ μμ€ν
μ μλ‘ μ₯λ¨μ μ΄ μ‘΄μ¬νκ³ , νμ
μ€ν¬λ¦½νΈλ μμΈ‘μ λͺ¨λ μν₯μ λ°μλ€. μ¦, νλ‘κ·Έλλ¨Έλ μ νν μ μλ€.
μ΄λ
Έν
μ΄μ
: νμ
μ€ν¬λ¦½νΈμ λͺ
μμ μΌλ‘ νμ
μ μ§μ ν μ μλ€.
'value:type’μ ννλ‘ μ°μ΄λ©° νμ
κ²μ¬κΈ°μκ² κ³§λ°λ‘ νμ
μ μ리λ μν μ νλ€.
μ΄λ
Έν
μ΄μ
μ μ°μ§ μμΌλ©΄ νμ
μ€ν¬λ¦½νΈκ° μμμ νμ
μ μΆλ‘ νλ€ : μ½λμμ μ€μΈλ€λ μΈ‘λ©΄μμ μ΄μ μ΄ μλ€.
const a: number = 10; // νμ
μ λͺ
μ
const b = 10; // νμ
μ μΆλ‘ νκ² ν¨
νμ
μ€ν¬λ¦½νΈ vs μλ°μ€ν¬λ¦½νΈ
λ€μ νλ νμ
μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈμ νμ
μμ€ν
μ λΉκ΅ν νλ€.
λ€λ§, μ€ν μ€λ² νλ‘/λ€νΈμν¬ μ°κ²° λκΉ/ μλͺ»λ μ¬μ©μ μ
λ ₯ λ± νμ
μ€ν¬λ¦½νΈκ° μ»΄νμΌ νμμ κ²μΆν μ μλ λ°νμ μμΈλ λ§λ€. λ€λ§… μμ μλ°μ€ν¬λ¦½νΈ μΈκ³μμ λ°νμ μλ¬λ‘ λ°μνμ λ§μ μλ¬λ₯Ό νμ
μ€ν¬λ¦½νΈλ μ»΄νμΌ νμμ κ²μΆν μ μλ€λ μ μ΄ ν΅μ¬μ΄λ€.
νμ
κ²°μ
λμ νμ
λ°μΈλ©μ΄λ, μλ°μ€ν¬λ¦½νΈκ° νλ‘κ·Έλ¨μ μ€νν΄μΌλ§ νΉμ λ°μ΄ν°μ νμ
μ μ μ μμμ μλ―Ένλ€.
λ°λλ‘ νμ
μ€ν¬λ¦½νΈλ μ μ§μ μΌλ‘ νμ
νμΈνλ€. μ»΄νμΌ νμμ νλ‘κ·Έλ¨μ λͺ¨λ νμ
μ μκ³ μμ λ μ΅μμ κ²°κ³Όλ₯Ό 보μ¬μ€ μ μμ§λ§, νλ‘κ·Έλ¨μ μ»΄νμΌνλ λ° λ°λμ λͺ¨λ νμ
μ μμμΌ νλ κ²μ μλλ€.(μΌλΆ νμ
μΆλ‘ κ°λ₯νλ―λ‘)
μ΄λ° μ μ§μ μ»΄νμΌμ μ½λμ μΌλΆλ§ κ³ μ³€μ λ μ 체 νλ‘κ·Έλ¨μ λ€μ μ»΄νμΌν νμκ° μμΌλ―λ‘ λΉ¨λ¦¬ μ¬μ»΄νμΌλλ€λ μ₯μ λ μλ€.
μ μ§μ νμ
νμΈμ ‘νμ
μ μ§μ νμ§ μμ κΈ°μ‘΄ μλ°μ€ν¬λ¦½νΈ μ½λ’λ₯Ό ‘νμ
μ μ¬μ©νλ νμ
μ€ν¬λ¦½νΈ’λ‘ λ§μ΄κ·Έλ μ΄μ
ν λ λ§€μ° μ μ©νλ€.
νμ§λ§ μ½λλ₯Ό λ§μ΄κ·Έλ μ΄μ
νλ μν©μ΄ μλλΌλ©΄ λͺ¨λ μ½λμ νμ
μ μ»΄νμΌ νμμ μ§μ νλ κ²μ λͺ©νλ‘ ν΄μΌ νλ€. λ°λ‘ μΈκΈνμ§ μλ ν μ΄ μ±
μ λͺ¨λ μ½λμ νμ
μ΄ μ»΄νμΌ νμμ μλ³λλλ‘ νλ λ°©μμ μΆκ΅¬ν κ²μ κΆμ₯νλ€.
νμ
λ³ν
μλ°μ€ν¬λ¦½νΈλ μ½ν νμ
μΈμ΄λ€. μ ν¨νμ§ μμ μ°μ°μ μννλ©΄ λ€μν κ·μΉμ μ μ©ν΄κ°λ©° κ°λ°μκ° μλν λ°λ₯Ό μμλ΄λ €κ³ λ
Έλ ₯νκ³ , κ²°κ³Όλ₯Ό λμΆνλ€.
λ€μκ³Ό κ°μ μκ° μλ€.
3 + [1]
1. μλ°μ€ν¬λ¦½νΈλ 3μ΄ μ«μκ³ [1]μ΄ λ°°μ΄μμ νμΈ
2. κ°λ°μκ° +λ₯Ό μ¬μ©νμΌλ―λ‘ μλ°μ€ν¬λ¦½νΈλ κ°μ μ°κ²°νκ³ μΆμ΄νλ κ²μΌλ‘ μΈμ§
3. μλ°μ€ν¬λ¦½νΈλ 3μ λ¬Έμμ΄ "3"μΌλ‘ μ묡μ μΈ λ³νμ μλ
4. μλ°μ€ν¬λ¦½νΈλ [1]μ λ¬Έμμ΄ "1"λ‘ μ묡μ μΈ λ³νμ μλ
5. λ λ¬Έμμ΄μ λΆμ¬ "31"μ΄λΌλ κ²°κ³Ό λμΆ
μ¦, μμκ°μ
3 + [1]λ₯Ό
(3).toString() + [1].toString()λ‘ λ°κΎΈμ΄λ²λ Έλ€. μλ°μ€ν¬λ¦½νΈκ° μ 곡νλ μ΄λ¬ν μ’
λ₯μ μ묡μ λ³ν λλΆμ λ€λ¦κ² λ¬Έμ κ° ν°μ Έλ κ·Έ μμΈμ μ°ΎκΈ°κ° νλ€λ€.
λ°λ©΄ νμ
μ€ν¬λ¦½νΈλ μ ν¨νμ§ μμ μμ
μ λ°κ²¬νλ TSCκ°
μ»΄νμΌ νμμ μ½λμ νμ
μ νμΈν κ²°κ³Όλ‘ μλ¬λ₯Ό 보μ¬μ€λ€.
3 + [1] // μλ¬ TS2365: '+' μ°μ°μλ₯Ό '3'κ³Ό 'number[]' νμ
μ μ μ© λΆκ°
'31'μ κ²°κ³Ό κ°μ λμΆνκ³ μΆμ κ²½μ°
let result = (3).toString() + [1].toString();
console.log(result); //31
μ¬λ°λ₯΄μ§ μμ μ°μ°μ μννλ©΄ νμ
μ€ν¬λ¦½νΈκ° λ°λ‘ κ·Έ λΆλΆμ μ§μ νλ©°, μλλ₯Ό λͺ
μν΄μΌ ν΅κ³Όν μ μλ€.
λΉ¨κ° λ°μ€μ΄ κ·Έμ΄μ§λ λλΆμ κ°λ°μλ μ½λλ₯Ό μ€ννκΈ° μ μ μ€μλ₯Ό μμμ°¨λ¦¬κ³ λ°λ‘μ‘μ μ μλ€.
'TypeScript > νμ μ€ν¬λ¦½νΈ TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νμ μ€ν¬λ¦½νΈ] ν©ν 리 ν¨ν΄ (0) | 2022.04.28 |
---|---|
[νμ μ€ν¬λ¦½νΈ] μ°μ΅μ©μΌλ‘ μμ£Ό μ¬μ©νλ μΈν (0) | 2022.04.27 |
[νμ μ€ν¬λ¦½νΈ] νμ λ λ€νμ±, νμ μ€ν¬λ¦½νΈ νλ‘κ·Έλλ° μ΄μ§νΈλ¦¬ μμ λΆμ (0) | 2022.04.26 |
[νμ μ€ν¬λ¦½νΈ] νμ λ³μΉ μΈν°μΉμ μ μν νμ₯ (0) | 2022.04.26 |
[νμ μ€ν¬λ¦½νΈ] μ λ€λ¦ νμ λ³μΉ (0) | 2022.04.26 |