μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- μ£Όμμ°½ν΄μ
- dart
- VanilaJS
- TypeScript
- μ½ν
- λ°±μ€
- nextjs
- router
- νμ΄μ¬
- HTML
- Python
- Frontend
- CSS
- Redux
- ContextAPI
- react native
- μ€ν¬λ‘€κ΅¬ν
- JavaScript
- react
- Today
- Total
JiSoo's Devlog
[μ°μν νμ μ€ν¬λ¦½νΈ] 6μ₯ λ³Έλ¬Έ
π μλ°μ€ν¬λ¦½νΈμ λ°νμκ³Ό νμ μ€ν¬λ¦½νΈμ μ»΄νμΌ
λ°νμκ³Ό μ»΄νμΌνμ
νλ‘κ·Έλλ° μΈμ΄λ κ³ μμ€, μ μμ€ μΈμ΄λ‘ κ΅¬λΆ κ°λ₯νλ€.
κ³ μμ€ μΈμ΄λ μ¬λμ΄ μ΄ν΄νκΈ° νμ΄ νμμΌλ‘ μμ±, μ μμ€ μΈμ΄λ μ»΄ν¨ν°κ° μ΄ν΄νκΈ° μ¬μ΄ νμμΌλ‘ μμ±λλ€.
μλ°μ€ν¬λ¦½νΈλ λνμ μΈ κ³ μμ€ μΈμ΄μ μνλ©° μ»΄νμΌλ¬λ μΈν°ν리ν°μ μν΄ μ μμ€ νλ‘κ·Έλλ° μΈμ΄λ‘ λ²μλμ΄ μ€νλλ€.
μμ€μ½λλ μ»΄νμΌλ¬μ μν΄ κΈ°κ³μ΄ μ½λλ‘ λ³νλμ΄ μ€ν κ°λ₯ν νλ‘κ·Έλ¨μ΄ λλλ° μ΄ λ¨κ³λ₯Ό μ»΄νμΌνμμ΄λΌκ³ νλ€.
μ»΄νμΌνμμ μμ€μ½λκ° μ»΄νμΌ κ³Όμ μ κ±°μ³ κΈ°κ³μ΄ μ½λλ‘ λ³νλμ΄ μ€νν μ μλ νλ‘κ·Έλ¨μ΄ λλ κ³Όμ μ μλ―Ένλ€.
μμ€μ½λμ μ»΄νμΌμ΄ μλ£λλ©΄ νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ μ¬λμ΄ μ€νλλλ° μ΄ μκ°μ λ°νμμ΄λΌκ³ νλ€.
μ¦, μ»΄νμΌ κ³Όμ μ λ§μΉ μμ© νλ‘κ·Έλ¨μ΄ μ¬μ©μμ μν΄ μ€νλλ κ³Όμ
μλ°μ€ν¬λ¦½νΈ λ°νμ
μλ°μ€ν¬λ¦½νΈ λ°νμμ μλ°μ€ν¬λ¦½νΈκ° μ€νλλ νκ²½
ex) ν¬λ‘¬, μ¬ν리 κ°μ μΈν°λ· λΈλΌμ°μ μ Node.js
μλ°μ€ν¬λ¦½νΈ λ°νμμ μ£Όμ κ΅¬μ± μμμλ μλ°μ€ν¬λ¦½νΈ μμ§, μΉ API, μ½λ°± ν, μ΄λ²€νΈ 루ν, λ λ νκ° μλ€.
νμ μ€ν¬λ¦½νΈμ λ°νμ
μ»΄νμΌμ μΆμν λ¨κ³κ° λ€λ₯Έ κ³ μμ€ μΈμ΄μμ μ μμ€ μΈμ΄λ‘ λ³νλλ κ³Όμ μ κ°λ¦¬ν¨λ€.
νμ μ€ν¬λ¦½νΈλ tscλ‘ λΆλ¦¬λ μ»΄νμΌλ¬λ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³νλλ€.
νμ§λ§ νμ μ€ν¬λ¦½νΈλ κ³ μμ€ μΈμ΄(νμ μ€ν¬λ¦½νΈ)κ° λ λ€λ₯Έ κ³ μμ€ μΈμ΄(μλ°μ€ν¬λ¦½νΈ)λ‘ λ³νλλ κ²μ΄κΈ° λλ¬Έμ μ»΄νμΌμ΄ μλ νΈλμ€νμΌμ΄λΌκ³ λΆλ₯΄κΈ°λ νλ€.
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ₯Ό μμ€ λ μ»΄νμΌλ¬λΌκ³ μ§μΉνκΈ°λ νλ€.
νμ μ€ν¬λ¦½νΈλ .ts νμ₯μκ° λΆμ νμΌμ μ»΄νμΌνκ³ .js νμ₯μκ° λΆμ μλ°μ€ν¬λ¦½νΈ νμΌμ λ§λ λ€.
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ μμ€μ½λλ₯Ό ν΄μν΄ AST(μΆμ ꡬ문 νΈλ¦¬)λ₯Ό λ§λ ν νμ νμΈμ κ±°μΉ λ€μ κ²°κ³Ό μ½λλ₯Ό μμ±νλ€.
AST(Abstract Syntax Tree)
μ»΄νμΌλ¬κ° μμ€μ½λλ₯Ό ν΄μνλ κ³Όμ μμ μμ±λ λ°μ΄ν° ꡬ쑰
μ»΄νμΌλ¬λ μ΄νμ λΆμκ³Ό ꡬ문 λΆμμ ν΅ν΄ μμ€μ½λλ₯Ό λ Έλ λ¨μμ νΈλ¦¬ κ΅¬μ‘°λ‘ κ΅¬μ±νλ€.
νμ μ€ν¬λ¦½νΈλ μ»΄νμΌνμμ νμ μ κ²μ¬νκΈ° λλ¬Έμ μλ¬κ° λ°μνλ©΄ νλ‘κ·Έλ¨ μ€νμ΄ μλλ€.
μ΄λ° νΉμ§ λλ¬Έμ νμ μ€ν¬λ¦½νΈλ₯Ό μ μ νμ κ²μ¬κΈ°λΌκ³ νλ€.
function add(a: number, b: number) {
return a + b;
}
add(10, 20);
add(10, "20"); // μλ¬ λ°μ
β¨ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬μ λμ
μ½λ κ²μ¬κΈ°λ‘μμ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ μ½λμ νμ μ€λ₯κ° μλμ§ νμΈνλ€.
νμ μ€ν¬λ¦½νΈμμλ μ»΄νμΌνμμ μ½λ νμ μ νμΈνκΈ° λλ¬Έμ μ½λλ₯Ό μ€ννμ§ μμλ μ€λ₯λ₯Ό μ°Ύμ μ μλ€.
μ»΄νμΌνμμ λ¬Έλ² μλ¬, νμ κ΄λ ¨ μλ¬λ₯Ό λͺ¨λ κ²μΆνλ€.
μλ°μ€ν¬λ¦½νΈμμλ λ°νμμ λ°κ²¬ν μ μλ μλ¬λ₯Ό, νμ μ€ν¬λ¦½νΈμμλ μ»΄νμΌνμμ λ°κ²¬ν΄ μ€ν κ³Όμ μμ λ°μν μ μλ λ¬Έμ λ₯Ό λ°©μ§νλ€.
μ½λ λ³νκΈ°λ‘μμ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ νμ κ²μ¬ ν νμ μ€ν¬λ¦½νΈ μ½λλ₯Ό κ°μμ λ°νμ νκ²½μμ λμν μ μλ ꡬλ²μ μ μλ°μ€ν¬λ¦½νΈλ‘ νΈλμ€νμΌνλ€.
νμ μ€ν¬λ¦½νΈ μμ€μ½λλ νμ±νκ³ μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³νν΄μΌ μ€νν μ μλ€.
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ νμ κ²μ¬ μν ν μ½λ λ³νμ μμνλλ° μ΄λ νμ μ€λ₯κ° μμ΄λ μΌλ¨ μ»΄νμΌμ μ§ννλ€.
νμ μ€ν¬λ¦½νΈ μ½λκ° μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³νλλ κ³Όμ μ νμ κ²μ¬μ λ 립μ μΌλ‘ λμνκΈ° λλ¬Έμ΄λ€.
ππ» νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬μ μν
1. μ΅μ λ²μ μ νμ μ€ν¬λ¦½νΈ, μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ꡬλ²μ μ μλ°μ€ν¬λ¦½νΈλ‘ νΈλμ€νμΌ
2. μ½λμ νμ μ€λ₯ κ²μ¬
βΌοΈ νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬μ ꡬ쑰
μ»΄νμΌλ¬λ ν νλ‘κ·Έλ¨μΌλ‘ μ΄λ₯Ό ꡬνν μμ€ νμΌμ΄ μ‘΄μ¬νλ€.
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ λ€μ― λ¨κ³λ₯Ό κ±°μ³ νμ κ²μ¬μ μλ°μ€ν¬λ¦½νΈ μμ€ λ³νμ μ§ννλ€.
μ€μΊλ: .ts ν ν°ν
↓
νμ: ν ν° κΈ°λ° AST μμ±
↓
λ°μΈλ: AST λ Έλ κΈ°λ° μ¬λ³Ό μμ±
↓
체컀: AST + μ¬λ³Ό κΈ°λ° νμ κ²μ¬
↓
μ΄λ―Έν°: AST + μ½λ κ²μ¬ κΈ°λ° .js μμ±
νλ‘κ·Έλ¨
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ tsc λͺ λ Ήμ΄λ‘ μ€νλκ³ tsconfig.jsonμ λͺ μλ μ»΄νμΌ μ΅μ μ κΈ°λ°μΌλ‘ μ»΄νμΌμ μννλ€.
λ¨Όμ μ 체μ μΈ μ»΄νμΌ κ³Όμ μ κ΄λ¦¬νλ νλ‘κ·Έλ¨ κ°μ²΄(μΈμ€ν΄μ€)κ° μμ±λκ³ μ΄ κ°μ²΄λ μ»΄νμΌν νμ μ€ν¬λ¦½νΈ μμ€ νμΌκ³Ό μν¬νΈλ νμΌμ λΆλ¬μ€λλ°, κ°μ₯ μ΅μ΄λ‘ λΆλ¬μ¨ νμΌ κΈ°μ€μΌλ‘ μ»΄νμΌ κ³Όμ μ΄ μμλλ€.
μ€μΊλ
μ€μΊλλ νμ μ€ν¬λ¦½νΈ μμ€ νμΌμ μ΄νμ μΌλ‘ λΆμν΄ ν ν°μ μμ±νλ€.
μ¦, μμ€μ½λλ₯Ό μμ λ¨μλ‘ λλ μλ―Έ μλ ν ν°μΌλ‘ λ³ννλ μμ μ μννλ€.
νμ
νμλ μ€μΊλκ° μ€ μμ€ νμΌμ ν ν° μ 보λ₯Ό μ΄μ©ν΄ ASTλ₯Ό μμ±νλ€.
ASTλ μ»΄νμΌλ¬κ° λμνλ λ° ν΅μ¬ κΈ°λ°μ΄ λλ μλ£ κ΅¬μ‘°λ‘, μμ€μ½λμ ꡬ쑰λ₯Ό νΈλ¦¬ ννλ‘ νννλ€.
μ€μΊλλ μ΄νμ λΆμκΈ ν΅ν΄ ν ν° λ¨μλ‘ μμ€μ½λλ‘ λλμ§λ§ νμλ μμ±λ ν ν° λͺ©λ‘μ νμ©ν΄ ꡬ문μ λΆμμ μννλ€.
μ΄λ₯Ό ν΅ν΄ μ½λμ μ€μ§μ μΈ κ΅¬μ‘°λ₯Ό λ Έλ λ¨μμ νΈλ¦¬ ννλ‘ νννλ€.
λ°μΈλ
λ°μΈλμ μ£Όμ μν μ 체컀 λ¨κ³μμ νμ κ²μ¬λ₯Ό ν μ μκ² κΈ°λ°μ λ§λ ¨νλ κ²μ΄λ€.
νμ κ²μ¬λ₯Ό μν΄ μ¬λ³Όμ΄λΌλ λ°μ΄ν° ꡬ쑰λ₯Ό μμ±νκ³ κ·Έμ λμνλ AST λ Έλλ₯Ό μ°κ²°νλ μν μ μννλ€.
μ¬λ³Όμ μ΄μ λ¨κ³μ ASTμμ μ μΈλ νμ μ λ Έλ μ 보λ₯Ό μ μ₯νλ€.
export interface Symbol {
flags: SymbolFlags;
escapedNamd: string;
declarations?: Declaration[];
//...
}
체컀μ μ΄λ―Έν°
체컀λ νμκ° μμ±ν ASTμ μ¬λ³Όμ νμ©ν΄ νμ κ²μ¬λ₯Ό μννλ€.
체컀λ ASTμ λ Έλλ₯Ό νμνλ©΄μ μ¬λ³Ό μ 보λ₯Ό λΆλ¬μ μμ€ νμΌμ λν νμ κ²μ¬λ₯Ό μ§ννλ€.
체컀μ νμ κ²μ¬λ λ€μ μ»΄νμΌ λ¨κ³μΈ μ΄λ―Έν°μμ μ€νλλ€.
checker.tsμ getDiagnostics() ν¨μλ‘ νμ μ κ²μ¦νκ³ νμ μλ¬μ λν μλ¬ λ©μμ§λ₯Ό μ μ₯νλ€.
μ΄λ―Έν°λ νμ μ€ν¬λ¦½νΈ μμ€ νμΌμ λ³ννλ μν μ νλ€.
νμ μ€ν¬λ¦½νΈ μμ€ νμΌμ μλ°μ€ν¬λ¦½νΈ νμΌκ³Ό νμ μ μΈ νμΌ(d.ts)λ‘ μμ±νλ€.
π νμ μ€ν¬λ¦½νΈ μ»΄νμΌ κ³Όμ μ 리
1. tsc λͺ λ Ήμ΄ μ€νν΄ νλ‘κ·Έλ¨ κ°μ²΄κ° μ»΄νμΌ κ³Όμ μμ
2. μ€μΊλλ μμ€ νμΌμ ν ν° λ¨μλ‘ λΆλ¦¬
3. νμλ ν ν°μΌλ‘ AST μμ±
4. λ°μΈλλ ASTμ κ° λ Έλμ λμνλ μ¬λ³Ό μμ±, μ¬λ³Όμ μ μΈλ νμ μ λ Έλ μ 보 λ΄κ³ μλ€.
5. 체컀λ ASTλ₯Ό νμνλ©΄μ μ¬λ³Ό μ 보 νμ©ν΄ νμ κ²μ¬
6. νμ κ²μ¬ κ²°κ³Ό μλ¬κ° μμΌλ©΄ μ΄λ―Έν°λ‘ μλ°μ€ν¬λ¦½νΈ μμ€ νμΌ λ³ν
'Frontend > Typescript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ°μν νμ μ€ν¬λ¦½νΈ] 8μ₯ (8) | 2025.06.06 |
---|---|
[μ°μν νμ μ€ν¬λ¦½νΈ] 7μ₯ (1) | 2025.06.05 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 5μ₯ (4) | 2025.05.28 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 4μ₯ (2) | 2025.05.23 |
[μ°μν νμ μ€ν¬λ¦½νΈ] 3μ₯ (0) | 2025.05.09 |