ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | , ํ๋ก ํธ์๋์ ํผํ ์ ์๋ ๋์ธ ํ์ ์คํฌ๋ฆฝํธ,์ด์ ๋ ์ ๋๋ก ์ ๋ณตํ ๋๊ฐ ์์ต๋๋ค! ๐ [์ฌ์ง]์ธํ์ฝ 2023 'ํ์ ์คํฌ๋ฆฝํธ๋ ์ ๊ทธ๋ด๊น?' ๋ฐํ์์ ๊ฐ์์ ๋๋ค. ๐ง ๋ฐฐ์
www.inflearn.com
๐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๊ฐํฉ๋๋ค
โ ์๋ฐ์คํฌ๋ฆฝํธ, ์ถฉ๋ถํ ์ ์ฐ๊ณ ์์๋๋ฐ ๊ผญ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ํ์ํ ๊น?
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ์์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ธ์ด ์ค ํ๋ (2022๋ Stack Overflow ์ค๋ฌธ 1์)
- ๋ธ๋ผ์ฐ์ ์์ ๊ฐ๋จํ ์ํธ์์ฉ์ ์ํด ์ค๊ณ๋์ด ๋ฌธ๋ฒ์ด ์ ์ฐํ๊ณ ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ์ ์ด์
โ ๊ทธ๋ฐ๋ฐ ์ ํ์ ์คํฌ๋ฆฝํธ?
- Node.js์ ๋ฑ์ฅ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฐ์์๋ ์คํ ๊ฐ๋ฅํด์ง
- ์ด์ ๋ ์น ์๋ฒ, ๋ชจ๋ฐ์ผ ์ฑ, ๋ฐ์คํฌํ ์ฑ ๋ฑ ๋ณต์กํ๊ณ ๋๊ท๋ชจํ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์๋ ์ฌ์ฉ๋จ
- ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ง๋์น ์ ์ฐํจ์ด ์คํ๋ ค ๋จ์ ์ด ๋จ -> ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ, ์ ์ง๋ณด์ ์ด๋ ค์
โ ํ์ ์คํฌ๋ฆฝํธ์ ๋ฑ์ฅ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ๊ณผ ์ฅ์ ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์, ์ ์ ํ์ ์์คํ ์ ์ถ๊ฐํด ์์ ์ฑ์ ๋ณด์ํ ์ธ์ด
- ์ฆ, ๋ ํฐ ๊ท๋ชจ์ ๊ฐ๋ฐ์ ์ ํฉํ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฒ์
๐ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๊ณ์ ๊ณผ ํ์ ์คํฌ๋ฆฝํธ
โ ํ์ ์์คํ ์ด๋?
- ๋ณ์์ ํ์ ์ ์ด๋ป๊ฒ ๊ฒฐ์ ํ๊ณ ๊ฒ์ฌํ ์ง์ ๋ํ ์ฒด๊ณ๋ก, ๋ ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌ
- ์ ์ ํ์ ์์คํ : ์คํ ์ ์ ํ์ ๊ฒฐ์ (์: Java, C)
- ๋์ ํ์ ์์คํ : ์คํ ์ค์ ํ์ ๊ฒฐ์ (์: JavaScript, Python)
โ ์ ์ ํ์ ์์คํ ์ ์ฅ๋จ์
- ์ฅ์ : ์คํ ์ ์ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ํ์ง ๊ฐ๋ฅ -> ์์ ์ฑ ๋์
- ๋จ์ : ๋ชจ๋ ๋ณ์์ ํ์ ์ ๋ช ์ํด์ผ ํ๋ฏ๋ก ๊ท์ฐฎ๊ณ ๋ฒ๊ฑฐ๋ก์
โ ํ์ ์คํฌ๋ฆฝํธ์ ํด๊ฒฐ์ฑ
- ์ ์ ํ์ ๊ฒ์ฌ์ ์์ ์ฑ๊ณผ ๋์ ํ์ ์ ์ ์ฐํจ์ ๋ชจ๋ ๊ฐ์ถ ํ์ด๋ธ๋ฆฌ๋ ํ์ ์์คํ
- ํ์ ์ ์ง์ ์ง์ ํ์ง ์์๋ ์ด๊ธฐ๊ฐ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์ถ๋ก ๊ฐ๋ฅ -> ์ค์ ๋ฐฉ์ง + ์ฝ๋ ์์ฐ์ฑ ์ ์ง
๐ ํ์ ์คํฌ๋ฆฝํธ์ ๋์ ์๋ฆฌ
โ ํ์ ์คํฌ๋ฆฝํธ์ ๋์ ๋ฐฉ์
- ๋๋ถ๋ถ์ ์ธ์ด์ฒ๋ผ ํ์ ์คํฌ๋ฆฝํธ๋ ์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์นจ
- ์์ฑํ ์ฝ๋๋ฅผ AST(์ถ์ ๋ฌธ๋ฒ ํธ๋ฆฌ)๋ก ๋ณํ ํ, ํ์ ์ค๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌ
- ํ์ ์ค๋ฅ๊ฐ ์๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋จ (๋ฐ์ดํธ์ฝ๋๊ฐ ์๋)
โ ํ์ ์คํฌ๋ฆฝํธ์ ์ปดํ์ผ ํ๋ฆ
- ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋ -> AST๋ก ๋ณํ
- AST ๊ธฐ๋ฐ ํ์ ๊ฒ์ฌ ์ํ
- ์ค๋ฅ๊ฐ ์์ผ๋ฉด -> ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ์ปดํ์ผ ์๋ฃ
- ์ต์ข JS ์ฝ๋๋ Node.js ๋๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ
โ ํต์ฌ ํน์ง
- ํ์ ์คํฌ๋ฆฝํธ๋ ์ปดํ์ผ ๊ฒฐ๊ณผ๋ก JS ์ฝ๋๊ฐ ์์ฑ๋จ
- ํ์ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ์ปดํ์ผ ์คํจ -> ์คํ ๋ถ๊ฐ
- ํ์ ๊ด๋ จ ์ฝ๋๋ ์คํ ์ ์ ๊ฑฐ๋จ -> ๋ฐํ์์๋ ์ํฅ ์์
๐ Hello TS World!
TypeScript ์ค์ต์ ์์ํ๊ธฐ ์ํด ํ์ํ ํ๊ฒฝ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. Node.js ์ค์น
2. Visual Studio Code ์ค์น
3. npm init
ใด Node.js ํจํค์ง ์ด๊ธฐํ
4. npm install @types/node
ใด Node.js ๋ด์ฅ ๊ธฐ๋ฅ์ ๋ํ ํ์ ์ ์ ์ค์น
5. npm install -g typescript
ใด typescript ์ปดํ์ผ๋ฌ ์ ์ญ ์ค์น
ใด tsc src/index.ts: .ts ํ์ผ์ .js๋ก ์ปดํ์ผ
ใด node src/index.js: ์ปดํ์ผ๋ .js ํ์ผ ์คํ
6. npm install -g tsx
ใด .js ํ์ผ ์์ฑ ์์ด .ts ํ์ผ์ ์ฆ์ ์คํ
ใด ์ 5๋ฒ์ฒ๋ผ 2๋จ๊ณ(tsc + node)๋ก ๋๋์ง ์๊ณ , tsx src/index.ts ํ ๋ฒ์ ์คํ ๊ฐ๋ฅ
console.log("Hello TypeScript")
const a: number = 1;
์ฒซ ๋ฒ์งธ ์ค์ต ์ฝ๋๋ผ ๊ทธ๋ฐ์ง ๋ญ๊ฐ ๊ต์ฅํ ๊ท์ฝ๋ค. ์ .ts ํ์ผ์ ์ปดํ์ผํ๋ฉด, ์์ฑ๋๋ .js ํ์ผ์ ์๋์ ๊ฐ๋ค.
console.log("Hello TypeScript")
const a = 1;
number ๊ฐ์ ํ์ ์ ๋ณด๋ TypeScript ์ ์ฉ ๋ฌธ๋ฒ์ด๋ผ, ์ปดํ์ผ ์ ์ ๊ฑฐ๋๊ณ ์์ํ JavaScript ์ฝ๋๋ง ๋จ๊ฒ ๋๋ค.
๐ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ์ต์ ์ค์ ํ๊ธฐ
{
"compilerOptions": {
"skipLibCheck": true,
"target": "ESNext",
"module": "ESNext",
"outDir": "dist",
"strict": false,
"moduleDetection": "force"
},
"include": ["src"]
}
โ TypeScript ์ปดํ์ผ๋ฌ ์ต์ ์์ฝ
- ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ ์ง ์ ์ดํ๋ ์ค์ ๊ฐ
- ๊ฒ์ฌ ๊ฐ๋, ์ถ๋ ฅ ์์น, JS ๋ฒ์ ๋ฑ ์ธ๋ถ์ ์ธ ์ปดํ์ผ ๋์ ์ ์ด ๊ฐ๋ฅ
- ์ค์ ํ์ผ: tsconfig.json
โ ์ฃผ์ ์ปดํ์ผ๋ฌ ์ต์
- include: ์ปดํ์ผํ TypeScript ํ์ผ์ ์์น/๋ฒ์ ์ง์
- target: ๋ณํํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฒ์ ์ง์
- module: ์ฌ์ฉํ ๋ชจ๋ ์์คํ ์ง์
- outDir: ์ปดํ์ผ๋ JS ํ์ผ์ ์ถ๋ ฅ ํด๋ ์ง์
- strict: ์๊ฒฉํ ํ์ ๊ฒ์ฌ ๋ชจ๋
- moduleDetection: ๋ชจ๋ .ts ํ์ผ์ ์๋์ผ๋ก ๋ชจ๋๋ก ์ธ์ (๋ณ์ ์ถฉ๋ ๋ฐฉ์ง)
โญ moduleDetection: "force"
- ํ์
์คํฌ๋ฆฝํธ์ ๋ชจ๋ ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ์ค์ฝํ๋ก ์ทจ๊ธ๋จ
-> ์๋ก ๋ค๋ฅธ ํ์ผ์์ ๊ฐ์ ๋ณ์๋ช ์ ์ฌ์ฉํ๋ฉด ์ถฉ๋ ๋ฐ์ - ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ํ์ผ์ ๋ก์ปฌ ๋ชจ๋๋ก ์ธ์์์ผ์ผ ํจ
-> ์ผ๋ฐ์ ์ผ๋ก๋ import ๋๋ export ํค์๋๋ฅผ ์ง์ ์์ฑํด์ผ ํจ - tsconfig.json์ "moduleDetection": "force" ์ค์
-> import ๋๋ export ํค์๋๋ฅผ ์ง์ ์์ฑํ์ง ์์๋ ์ปดํ์ผ๋ JS ํ์ผ์ ๋ชจ๋ ๊ด๋ จ ์ฝ๋๊ฐ ์๋ ์ฝ์ ๋จ
โฌ๏ธ ๋ค์ ๋ด์ฉ์ ์๋ ๊ธ์ ์ฐธ๊ณ
์ธํ๋ฐ ๊ฐ์ - ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ (ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ)
ํ ์ ํฌ๊ธฐ๋ก ์๋ผ๋จน๋ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ์ด์ ํ Winterlood | , ํ๋ก ํธ์๋์ ํผํ ์ ์๋ ๋์ธ ํ์ ์คํฌ๋ฆฝํธ,์ด์ ๋ ์ ๋๋ก ์ ๋ณตํ ๋๊ฐ ์์ต๋๋ค! ๐ [์ฌ์ง]
isliife2.tistory.com