JavaScript๊ฐ€ ์•„๋‹Œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

2025. 10. 25. 10:42ใ†Front-end/TypeScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. TypeScript๋ž€?

    1-1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

    1-2. JsDoc์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

2. TypeScript์˜ ํŠน์ง•

3. TypeScript์˜ ์žฅ๋‹จ์ 


1. TypeScript๋ž€?

1. ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…์„ ๋ถ€์—ฌํ•œ ์–ธ์–ด๋กœ, Microsoft์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.

Apache ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋œ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ, 2012๋…„ 10์›”์— ์ฒ˜์Œ ๋ฆด๋ฆฌ์ฆˆ๋˜์—ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํƒ€์ž…์„ ์œ ์—ฐํ•˜๊ฒŒ ํ•˜์—ฌ ์–ด๋–ป๊ฒŒ๋“  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ํ๋ฆ„์ด์—ˆ๋‹ค๋ฉด,

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ€์—ฌํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ๊ฐœ๋ฐœ์„ ํ•˜์—ฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํƒ„์ƒ ์˜์˜์ด๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž… ๋“ฑ์„ ์ถ”๊ฐ€ํ•œ ํ™•์žฅํŒ ๋А๋‚Œ์œผ๋กœ,

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

2. JsDoc์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

JsDoc๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— ์ฃผ์„์„ ํ†ตํ•ด ํƒ€์ž… ์ •๋ณด๋‚˜ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์ด๋‹ค.

ํƒ€์ž…์„ ์ •์˜ํ•˜์ง€ ์•Š๊ณ ๋„, ์ฃผ์„์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์™€ ๊ฐœ๋ฐœ ๋„๊ตฌ๊ฐ€ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ์ง„์ž… ์žฅ๋ฒฝ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด, JsDoc๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž…์„ ๊นŒ๋‹ค๋กญ๊ฒŒ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํƒ€์ž… ์ถ”๋ก ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ JsDoc๋Š” ์‹ค์ œ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„, ํƒ€์ž… ์ •๋ณด์˜ ๋ฌธ์„œ์  ์˜๋ฏธ๋งŒ ๊ฐ€์ง€๋ฉฐ ์ •์  ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ถœํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ง€ ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•œ ์ฃผ์„ ์ฒ˜๋ฆฌ์ด๋‹ค.

 


2. TypeScript์˜ ํŠน์ง•

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” JavaScript + ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ + ์ตœ์‹  ECMAScript ๋ฌธ๋ฒ• ์ง€์› + ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ ๊ธฐ๋Šฅ ์„ ํ•ฉ์นœ ์–ธ์–ด์ด๋‹ค.

 

1. ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ

1) ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ ์‹คํ–‰ ์ „ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ถœํ•œ๋‹ค.

๋Ÿฐํƒ€์ž„์ด ์•„๋‹Œ ๊ฐœ๋ฐœ ์‹œ์ ์— ํƒ€์ž… ๋ถˆ์ผ์น˜๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ธ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

let age: number = 25;	// number๋กœ ํƒ€์ž… ์ง€์ •
age = "25";	// ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

2) ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์ถ”๋ก 

๋ชจ๋“  ๋ณ€์ˆ˜์— ์ผ์ผ์ด ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’, ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•œ๋‹ค.

let msg = "hello";	// string์œผ๋กœ ์ถ”๋ก ๋จ
msg = 123;	// ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

3) ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ œ๋„ค๋ฆญ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค(interface), ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๋Š” ์ œ๋„ค๋ฆญ(generics)์„ ์ง€์›ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์€ ์ฝ”๋“œ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

interface User {
  name: string;
  age: number;
}

function greet<T extends User>(user: T): string {
  return `์•ˆ๋…•ํ•˜์„ธ์š” ${user.name}๋‹˜ (${user.age}์„ธ)`;
}

 

 

2. ์ตœ์‹  ECMAScript ๋ฌธ๋ฒ• ์ง€์›

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ES6 ์ด์ƒ ๋ฌธ๋ฒ•์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋ฉฐ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ปดํŒŒ์ผ ์‹œ ๊ตฌ๋ฒ„์ „ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. ๊ฐœ๋ฐœ ํ–ฅ์ƒ์„ฑ ๊ธฐ๋Šฅ ์ง€์›

1) ๋„๊ตฌ ์นœํ™”์„ฑ

vs code ๋“ฑ์˜ ์ฃผ์š” IDE์—์„œ ์ž๋™ ์™„์„ฑ, ํƒ€์ž… ๊ฒ€์‚ฌ, ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง, ์ •์˜ ์ด๋™ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ์ž ์ง€์› ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ์†๋„์˜ ํ–ฅ์ƒ, ์˜ค๋ฅ˜ ๊ฐ์†Œ์— ๊ธฐ์—ฌํ•œ๋‹ค.

 

2) ์ ์ง„์  ์ ์šฉ ๊ฐ€๋Šฅ

๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์ ํŠธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

.js ํŒŒ์ผ์— ์ ์ง„์ ์œผ๋กœ .ts๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜, allowJs ์˜ต์…˜์„ ํ†ตํ•ด ๋‘ ์–ธ์–ด๋ฅผ ํ˜ผํ•ฉ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 


3. TypeScript์˜ ์žฅ๋‹จ์ 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์žฅ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์žฅ์  ์ฝ”๋“œ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์—๋Ÿฌ๋ฅผ ์กฐ๊ธฐ ๋ฐœ๊ฒฌํ•˜์—ฌ ๋ฒ„๊ทธ ์˜ˆ๋ฐฉ ๋ฐ QA ๋น„์šฉ ๊ฐ์†Œ
๋›ฐ์–ด๋‚œ ์ž๋™ ์™„์„ฑ๊ณผ ๋ฆฌํŒฉํ† ๋ง ์ง€์› IDE๊ฐ€ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ธ์‹ํ•˜์—ฌ ์ž๋™ ์™„์„ฑ, ์ž๋™ ๋ฆฌํŒฉํ† ๋ง์ด ์ •๊ตํ•˜๊ฒŒ ๋™์ž‘
→ ์ฝ”๋“œ ์ƒ์‚ฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
๋ช…ํ™•ํ•œ ์ฝ”๋“œ ์˜๋„ ํ‘œํ˜„ ํƒ€์ž… ์„ ์–ธ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚จ
์ตœ์‹  ECMAScript ๊ธฐ๋Šฅ ์„ ์ œ ์ง€์› ECMAScript ํ‘œ์ค€์— ์•ž์„œ class, decorator, async/await ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ง€์›
์ ์ง„์  ๋„์ž… ๊ฐ€๋Šฅ js์™€ ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง ์—†์ด๋„ ์ ์ง„์  ๋ฆฌํŒฉํ† ๋ง ๊ฐ€๋Šฅ
๋‹จ์  ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ํ•™์Šต ๋น„์šฉ ์ปดํŒŒ์ผ ์„ค์ •, ํƒ€์ž… ์„ ์–ธ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ดˆ๊ธฐ ํ•™์Šต ์‹œ๊ฐ„์ด ํ•„์š”
์ปดํŒŒ์ผ ๋‹จ๊ณ„ ์ถ”๊ฐ€๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ฆ๊ฐ€ ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋น„ํ•ด ๋นŒ๋“œ ์†๋„๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์Œ
์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ๋ถ€๋‹ด ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ, ํ”„๋กœํ† ํƒ€์ž… ์ˆ˜์ค€์—์„œ๋Š” ์˜คํžˆ๋ ค ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Œ

 

์žฅ๋‹จ์ ์„ ๋‚˜์—ดํ•ด๋ดค๋Š”๋ฐ, ์‚ฌ์‹ค ๋‹จ์ ๋„ ์—ด์‹ฌํžˆ ๋„์ง‘์–ด ๋‚ธ ๋А๋‚Œ์ด ์žˆ์ง€ ์•Š๋‚˜ ์‹ถ๋‹ค.

 

19๋…„๋„์— prettier๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฐ•์ œ๊ฐ€ ๋˜์ง€ ์•Š์€ ์ฑ„๋กœ ์ฝ”๋”ฉ์„ ํ–ˆ์„ ๋•Œ ์ด๋Ÿฐ ์—๋Ÿฌ๋“ค์„ ๋ช‡์‹œ๊ฐ„๋™์•ˆ ์ฝ”๋“œ ํ•œ ์ค„ ํ•œ์ค„์„ ๋ˆˆ์•Œ ๋น ์ง€๊ฒŒ ์ฐพ์•˜๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค. 

  • ์„ธ๋ฏธ์ฝœ๋ก (;) ํ•˜๋‚˜๊ฐ€ ์ฝœ๋ก (:)์œผ๋กœ ์ž˜๋ชป ๋“ค์–ด๊ฐ
  • ์•„์ดํฐ์œผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ๊ฐ€์ ธ์™”๋‹ค๊ฐ€ ์ด์ƒํ•œ ๋”ฐ์˜ดํ‘œ๊ฐ€ ๋“ค์–ด๊ฐ

์ด์ œ๋Š” ai๋„ ์žˆ์–ด์„œ ๋”ธ๊นํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์—๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ..

 

 

์ด๋Ÿฐ ๊ด€์ ์œผ๋กœ ๋ณด๋ฉด ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•˜์—ฌ ์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•