
νμ μ€ν¬λ¦½νΈμ κ΄ν΄ κΆκΈνλ μ°°λ <<νμ μ€ν¬λ¦½νΈ νκ³ κ·Έλλ°>>μ΄ μ λ¬Έμκ° μμνκΈ°μ μμλ λ§κ³ μ€λͺ μ΄ μΉμ νλ€κ³ ν΄μ μ΄ μ± μΌλ‘ νμμ€ν¬λ¦½νΈ μ λ¬Έμ λμ νκ³ μ νλ€.
λͺ©μ°¨
2.1 μ»΄νμΌλ¬
2.2 νμ
μμ€ν
2.3 μ½λ νΈμ§κΈ° μ€μ
2.4 index.js
2.1 μ»΄νμΌλ¬
νμ μ€ν¬λ¦½νΈλ λ€λ₯Έ μΈμ΄μ λ¬λ¦¬ μ»΄νμΌλ¬κ° μ½λλ₯Ό λ°μ΄νΈμ½λ λμ μλ°μ€ν¬λ¦½νΈ μ½λλ‘ λ³ννλ€. μ΄νλ‘λ μΌλ°μ μΈ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€ννλ―μ΄ λΈλΌμ°μ , NodeJS λ±μΌλ‘ μ€νν μ μλ€.
νμ μ€ν¬λ¦½νΈ μ»΄νμΌλ¬λ ASTλ₯Ό λ§λ€μ΄ κ²°κ³Ό μ½λλ₯Ό λ΄λκΈ° μ μ νμ νμΈμ κ±°μΉλ€. νμ νμΈ λλΆμ νμ μ€ν¬λ¦½νΈλ νλ‘κ·Έλ¨μ΄ κ°λ°μμ κΈ°λλλ‘ μ€νλ μ μκ² ν΄μ£Όκ³ , λͺ λ°±ν μ€μκ° λ€μ΄κ°μ§ μκ² λ°©μ§ν΄μ€λ€.
νμ κ²μ¬κΈ°(typechecker)
μ½λμ νμ μμ μ±μ κ²μ¦νλ νΉλ³ν νλ‘κ·Έλ¨
νμ
νμΈκ³Ό μλ°μ€ν¬λ¦½νΈ λ°©μΆ λΆλΆμ ν¬ν¨νλ©΄ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌ κ³Όμ μ λλ΅ μλμ κ°λ€.

κ³Όμ 1~2μμ μμ€ μ½λμ μ¬μ©λ νμ μ μ΄μ©νμ§λ§, κ³Όμ 3μμλ μ΄μ©νμ§ μλλ€. λ€μ λ§ν΄, TSCκ° νμ μ€ν¬λ¦½νΈ μ½λλ₯Ό μλ°μ€ν¬λ¦½νΈ μ½λλ‘ μ»΄νμΌν λλ κ°λ°μκ° μ¬μ©ν νμ μ νμΈνμ§ μλλ€.(κ°λ°μκ° μ¬μ©ν νμ μ λ¨μ§ νμ μ νμΈνλ λ°λ§ μ°μΈλ€λ λ»)
2.2 νμ μμ€ν
νμ μμ€ν (type system)
νμ κ²μ¬κΈ°κ° νλ‘κ·Έλ¨μ νμ μ ν λΉνλ λ° μ¬μ©νλ κ·μΉ μ§ν©
νμ μμ€ν μ λ³΄ν΅ λ κ°μ§ μ’ λ₯. νμ μ€ν¬λ¦½νΈλ λ κ°μ§ μμ€ν λͺ¨λμ μν₯μ λ°λλ€.(μ¦, κ°λ°μλ νμ μ λͺ μνκ±°λ νμ μ€ν¬λ¦½νΈκ° μΆλ‘ νλλ‘ νλ λ°©μ μ€μμ μ νν μ μμ)
1. μ΄λ€ νμ μ μ¬μ©νλμ§λ₯Ό μ»΄νμΌμ λͺ μμ μΌλ‘ μλ €μ£Όλ νμ μμ€ν : μ΄λ Έν μ΄μ μ¬μ©
// μ΄λ
Έν
μ΄μ
μ 'value: type' νμ±λ‘ μ°μ
let a: number = 1 // aλ number
let b: string = 'hello' // bλ string
let cL boolean[] = [true, false] // cλ boolean λ°°μ΄
2. μλμΌλ‘ νμ
μ μΆλ‘ νλ νμ
μμ€ν
: μ΄λ
Έν
μ΄μ
μ¬μ© X
- νμ
μ€ν¬λ¦½νΈκ° νμ
μ μΆλ‘ νλλ‘ λλ κ²μ΄ μ½λλ₯Ό μ€μΌ μ μλ λ°©λ²μ΄λ―λ‘ λ³΄ν΅ μ΄λ
Έν
μ΄μ
μ μλ΅ν¨
let a = 1 // aλ number
let b = 'hello' // bλ string
let c = [true, false] // cλ boolean λ°°μ΄
2.2.1 νμ
μ€ν¬λ¦½νΈ VS μλ°μ€ν¬λ¦½νΈ

1) νμ μ μ΄λ»κ² κ²°μ λλκ°?
λμ νμ λ°μΈλ©(dynamic type binding)μ΄λ μλ°μ€ν¬λ¦½νΈκ° νλ‘κ·Έλ¨μ μ€νν΄μΌλ§ νΉμ λ°μ΄ν° νμ μ μ μ μμμ μλ―Ένλ€. μλ°μ€ν¬λ¦½νΈλ νλ‘κ·Έλ¨μ μ€ννκΈ° μ μλ νμ μ μ μ μλ€.
νμ
μ€ν¬λ¦½νΈλ μ μ§μ μΌλ‘ νμ
μ νμΈνλ(gradually typed) μΈμ΄λ€. μ¦, νμ
μ€ν¬λ¦½νΈλ μ»΄νμΌ νμμ νλ‘κ·Έλ¨μ λͺ¨λ νμ
μ μκ³ μμ λ μ΅μμ κ²°κ³Όλ₯Ό 보μ¬μ€ μ μμ§λ§, νλ‘κ·Έλ¨μ μ»΄νμΌνλ λ° λ°λμ λͺ¨λ νμ
μ μμμΌ νλ κ²μ μλλ€.
νμ
μ€ν¬λ¦½νΈλ νμ
μ μ§μ νμ§ μμ νλ‘κ·Έλ¨μ΄λΌλ κ·Έμ€ μΌλΆ νμ
μ μΆλ‘ ν΄μ μ€λ₯λ₯Ό κ²μΆν μ μμ§λ§, λͺ¨λ νμ
μ μμ§ λͺ»νλ μν©μμλ λ§μ μ€λ₯κ° μ¬μ©μμκ² κ·Έλλ‘ λ
ΈμΆλ μ μλ€.
μ μ§μ νμ νμΈμ νμ μ μ§μ νμ§ μμ κΈ°μ‘΄ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νμ μ μ¬μ©νλ νμ μ€ν¬λ¦½νΈλ‘ λ§μ΄κ·Έλ μ΄μ ν λ νΉν μ μ©.(νμ§λ§ μ½λλ₯Ό λ§μ΄κ·Έλ μ΄μ νλ μν©μ΄ μλλΌλ©΄ λͺ¨λ μ½λμ νμ μ μ»΄νμΌ νμμ μ§μ νλ κ²μ λͺ©νλ‘ ν΄μΌν¨)
2) μλμΌλ‘ νμ μ΄ λ³νλλκ°?
μλ°μ€ν¬λ¦½νΈλ νμ
μ λ³ννλ € λ
Έλ ₯νλ€.
μλ₯Ό λ€μ΄ 3 + [1] μ κ²½μ°, μλ°μ€ν¬λ¦½νΈλ κ°λ°μκ° +λ₯Ό μ¬μ©νμΌλ―λ‘ κ°λ°μ λ κ°μ μ°κ²°νκ³ μΆμ΄ νλ€κ³ μκ°ν΄ 3μ λ¬Έμμ΄ "3"μΌλ‘, [1]μ λ¬Έμμ΄ "1"λ‘ μ묡μ μΈ λ³νμ μνν΄ λ λ¬Έμμ΄μ λΆμ¬ "31"μ΄λΌλ κ²°κ³Όλ₯Ό λμΆν¨.
λ°λ©΄ νμ μ€ν¬λ¦½νΈλ μ ν¨νμ§ μμ μμ μ λ°κ²¬νλ μ¦μ λΆννλ€.(μλ¬λ₯Ό λ°μμν¨λ€λ λ») μ¬λ°λ₯΄μ§ μμ 보μ΄λ μ°μ°μ μννλ©΄ νμ μ€ν¬λ¦½νΈλ λ°λ‘ κ·Έ λΆλΆμ μ§μ κ°λ©°, μλλ₯Ό λͺ μν΄μΌ νμ μ€ν¬λ¦½νΈμ μ§μ μ 무μ¬ν ν΅κ³Όν μ μλ€.
μλ°μ€ν¬λ¦½νΈμ κ·Έλ° μ묡μ λ³ν λλ¬Έμ λ¬Έμ μ μμΈμ μΆμ νκΈ° μ΄λ ΅κΈ° λλ¬Έμ νμ μ λ³νν λλ λͺ μμ μΌλ‘ ν΄μΌ νλ€.
3) μΈμ νμ μ κ²μ¬νλκ°?
μλ°μ€ν¬λ¦½νΈμ κ²½μ° μ£Όλ‘ κ°λ°μμ μλμ λ§κ² λ³νμν¬ λΏ λλΆλΆμ μν©μμ νμ μ΄ λ¬΄μμΈμ§ λ°μ§μ§ μλλ€.
λ°λ©΄ νμ μ€ν¬λ¦½νΈμ κ²½μ° μ»΄νμΌ νμμ μ½λμ νμ μ νμΈνκΈ° λλ¬Έμ μ μ μΌλ‘ μ½λλ₯Ό λΆμν΄ μ΄λ° μλ¬λ₯Ό κ²μΆνμ¬ μ½λλ₯Ό μ€ννκΈ°λ μ μ μλ €μ€λ€.
4) μλ¬λ μΈμ κ²μΆλλκ°?
μλ°μ€ν¬λ¦½νΈλ λ°νμμ μμΈλ₯Ό λμ§κ±°λ μ묡μ μΈ νλ³νμ μννκΈ° λλ¬Έμ νλ‘κ·Έλ¨μ μ€νν΄μΌλ§ μ΄λ€ λ¬Έμ κ° μμμ νμΈν μ μλ€. (μ΄ μ’μΌλ©΄ λ¨μ ν μ€νΈ μ€ννλ€κ° λ°κ²¬ν μλ)
νμ μ€ν¬λ¦½νΈμ κ²½μ° μ»΄νμΌ νμμ λ¬Έλ² μλ¬μ νμ κ΄λ ¨ μλ¬λ₯Ό λͺ¨λ κ²μΆνλ€.
2.3 μ½λ νΈμ§κΈ° μ€μ
λ VSCodeλ₯Ό μ¬μ©νκΈ° λλ¬Έμ VSCodeλ₯Ό μ¬μ©ν κ±°λ€. μ΄μΈμ μ½λ νΈμ§κΈ°λ‘ μν°(Atom), μλΈλΌμ ν μ€νΈ(Sublime Text) λ±μ μ νν μ μλ€. (λ³ΈμΈμκ² νΈν κ±Έλ‘ μ ννλ©΄ λ¨)
TSC μ체λ νμ μ€νΈλ¦½νΈλ‘ ꡬνλ λͺ λ Ήν λꡬμ΄λ―λ‘ TSCλ₯Ό μ€ννλ €λ©΄ NodeJSκ° νμνλ€. NodeJsλ νλ‘μ νΈμ μμ‘΄μ±μ΄λ λΉλλ₯Ό κ΄λ¦¬νλ ν¨ν€μ§ κ΄λ¦¬μ NPMμ ν¬ν¨νλ€. NPMμ μ΄μ©ν΄ TSCμ TSLint(TypeScript Linter; νμ μ€ν¬λ¦½νΈ λ¦°ν°)λ₯Ό μ€μΉνλ€.
ν°λ―Έλ μ°½μ μ΄μ΄ μ λλ ν°λ¦¬λ₯Ό λ§λ€κ³ κ·Έ μμ μ NPM νλ‘μ νΈλ₯Ό μ΄κΈ°νν΄λ³΄μ.
# μ λλ ν°λ¦¬ μμ±
mkdir chapter-2
cd chapter-2
# μ NPM νλ‘μ νΈ μ΄κΈ°ν (ν둬ννΈμ μ§μμ λ°λ¦, μ§λ¬Έ μμ΄ μμνκ³ μΆμΌλ©΄ npm init -y)
npm init
# TSC, TSLint, NodeJSμ© νμ
μ μΈ μ€μΉ
npm install --save-dev typescript tslint @types/node
2.3.1 tsconfig.json
λͺ¨λ νμ μ€ν¬λ¦½νΈ νλ‘μ νΈλ λ£¨νΈ λλ ν°λ¦¬μ tsconfig.jsonμ΄λΌλ νμΌμ΄ μ‘΄μ¬ν΄μΌ νλ€. tsconfig.json νμΌμ νμ μ€ν¬λ¦½νΈμ νλ‘μ νΈμμ μ΄λ€ νμΌμ μ»΄νμΌνκ³ , μ΄λ€ μλ°μ€ν¬λ¦½νΈ λ²μ μΌλ‘ λ°©μΆνλμ§ λ±μ μ μνλ€.
λ£¨νΈ λλ ν°λ¦¬μ tsconfig.jsonμ΄λΌλ νμΌμ λ§λ€κ³ (ν°λ―Έλμ touch tsconfig.json μ λ ₯ or VSCode μ΄μ΄μ νμΌ μ νν΄μ μ μΌ μμ ν΄λμ tsconfig.json μ§μ λ§λ€κΈ°) μλμ κ°μ λ΄μ©μ μ λ ₯νλ€.
{
"compilerOptions":{
"lib": ["es2015"],
"module": "commonjs",
"outDir": "dist",
"sourceMap": true,
"strict": true,
"target": "es2015"
},
"include": [
"src"
]
}
μμ μμλ tsconfig.json νμΌμ μ§μ λ§λ€μμ§λ§ λ€μλΆν°λ ./node_modules/.bin/tsc --initλΌλ νμ μ€ν¬λ¦½νΈμ λ΄μ₯ λͺ λ Ήμ μ΄μ©ν΄ νμ μ€ν¬λ¦½νΈ νλ‘μ νΈλ₯Ό μλμΌλ‘ μ€μ ν μ μμ.

tsconfig.json νμΌμ μ΄μ©ν΄ κ°νΈνκ² μμ€ λ²μ κ΄λ¦¬ μμ€ν
μ μ€μ μ ν¬ν¨ν μ μκ³ , λͺ
λ Ήνμ μ΄μ©ν΄ TSCμ μ΅μ
λλΆλΆμ μ μ΄νλ λ°©λ²λ μλ€. μ΄μ©ν μ μλ λͺ
λ Ήν μ΅μ
μ Run ./node_modules/.bin/tsc --helpλ₯Ό μ€νν΄ νμΈν μ μλ€.
2.3.2 tslint.json
λ³΄ν΅ νλ‘μ νΈλ TSLint μ€μ (νμ μ¬μ©ν μ§ κ³΅λ°±μ μ¬μ©ν μ§ λ±μ κ²°μ νλ μ½λ© μ€νμΌ κ·μ½)μ μ μνλ tslint.json νμΌλ ν¬ν¨νλ€. (μ ν μ¬νμ΄κΈ΄ νλ° λͺ¨λ νμ μ€νΈλ¦½νΈ νλ‘μ νΈμ TSLintλ₯Ό μ΄μ©ν΄ μΌκ΄λ μ½λ© μ€νμΌμ μ¬μ©νλλ‘ κ°λ ₯ν κΆμ₯ν¨)
λ€μμ κΈ°λ³Έκ°μΌλ‘ μ±μμ§ tslint.json νμΌμ λ§λλ λͺ λ Ήμ΄λ€.
./node_modules/.bin/tslint --init
κ·Έλ¦¬κ³ λ§λ€μ΄μ§ νμΌμ μμ μ μ½λ© μ€νμΌμ λ§κ² νΈμ§ν μ μλ€. μλλ μ± μ μ μμ tslint.json νμΌ λ΄μ©μ΄λ€.
{
"defaultSeverity": "error",
"extends": [
"tslint:recommended"
],
"rules": {
"semicolon": false,
"trailing-comma": false
}
}
2.4 index.ts
tsconfig.json νμΌκ³Ό tslint.json νμΌμ μ€μ νμΌλ©΄ index.ts νμΌμ μΆκ°ν΄λ³΄μ.
mkdir src
touch src/index.ts
μμ±λ index.ts νμΌμ μλμ κ°μ νμ μ€ν¬λ¦½νΈ μ½λλ₯Ό μ λ ₯νλ€.
console.log("Hello TypeScrit!")
νμμ€ν¬λ¦½νΈ μ½λλ₯Ό μ»΄νμΌνκ³ μ€ννμ.
# TSCλ‘ νμ
μ€ν¬λ¦½νΈ μ»΄νμΌ
./node_module/.bin/tsc
# NodeJsλ‘ μ½λ μ€ν
node ./dist/index.js
μμ λ¨κ²λ₯Ό μ λλ‘ λ°λΌ νλ€λ©΄ μ½λλ₯Ό μ€ννμ λ μ½μμ λ€μκ³Ό κ°μ ν μ€μ λ‘κ·Έκ° μΆλ ₯λλ€.
Hello TypeScript!
'Reviews π§ > Books' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μ’μ μ½λ, λμ μ½λ review] 2μ₯ μΆμν κ³μΈ΅ (2) | 2024.01.11 |
---|---|
[νμ μ€ν¬λ¦½νΈ νλ‘κ·Έλλ° review] 3μ₯ νμ μ λͺ¨λ κ² (0) | 2023.12.14 |
[μ’μ μ½λ, λμ μ½λ review] 1μ₯ μ½λ νμ§ (1) | 2023.12.12 |