๐Ÿ‘€

1. TypeScript๋ž€?

1.1 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ, ๋„ค๊ฐ€ ๊ถ๊ธˆํ•ด!

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํ•œ๋ฒˆ์ฏค ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ผ๊นŒ?
ย 
notion imagenotion image
"Typescript is a typed superset of Javascript that compiles to plain Javascript" ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ๋˜๋Š”, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž…์ด ์žˆ๋Š” ์ƒ์œ„์ง‘ํ•ฉ์ด๋‹ค. -๊ณต์‹ ๋ฌธ์„œ-
ย 
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šˆํผ์…‹์ธ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ปค๋‹ค๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„๋œ ์–ธ์–ด์ด๋‹ค.
ย 
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šˆํผ์…‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋„ ๋™์ž‘ํ•œ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์ž์‹ ์ด ์›ํ•˜๋Š” ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ์šด์˜ ์ฒด์ œ, ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €, ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜คํ”ˆ ์†Œ์Šค์ด๋‹ค.
-์œ„ํ‚ค๋ฐฑ๊ณผ-
ย 
๊ณต์‹๋ฌธ์„œ์™€ ์œ„ํ‚ค๋ฐฑ๊ณผ์—์„œ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ๋‹จ์–ด๋Š” ํƒ€์ž…์ด ์žˆ๋Š”(typed) ๊ณผ ์ƒ์œ„์ง‘ํ•ฉ(superset)์ด๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์ด ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ด๋‹ค. ์ข€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์  ํƒ€์ž… ๋ฌธ๋ฒ•์„ ์ถ”๊ฐ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ปดํŒŒ์ผ(complile)ย ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์—ฌ๊ธฐ์„œ ์ด๋Ÿฌํ•œ ์˜๋ฌธ์ด ๋“ค ๊ฒƒ์ด๋‹ค.
ย 
๊ทธ๋Ÿผ ๊ตณ์ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์™œ ์“ฐ๋Š” ๊ฑฐ์•ผ?
ย 
์ง€๊ธˆ๋ถ€ํ„ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€ ์•Œ์•„๋ณด์ž.
ย 
ย 

1.2 ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

1.2.1 ์—๋Ÿฌ, ๋‚ด๊ฐ€ ๋ฏธ๋ฆฌ ๋ง‰์„๊ฒŒ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ค๋ฅด๊ฒŒ ์—๋Ÿฌ๋ฅผ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์—ฌ์ค€๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค ์ž‘์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•˜๋ ค๋Š” ํƒ€์ด๋ฐ์— ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์ผ์ •์— ์ฐจ์งˆ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์ฝ”๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
ย 
์•„๋ž˜ 2๊ฐ€์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์—๋Ÿฌ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š”์ง€ ๊ฐ™์ด ์‚ดํŽด๋ณด์ž.
// math.js function sum(a, b) { return a + b; }
// math.ts function sum(a: number, b: number) { return a + b; }
ํ•˜๋‚˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ํ•˜๋‚˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ด๋ฉฐ, ๋‘ ์ฝ”๋“œ ๋ชจ๋‘ ์ˆซ์ž์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ์ฝ”๋“œ์ด๋‹ค. ์ด ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ฒ ๋‹ค.
ย 
sum(20, 30); // 50
์ด๋ ‡๊ฒŒย sumย ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆซ์ž 20 ๊ณผ 30 ์„ ๋”ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ์ธ 50 ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
ย 
sum('20', '30'); // 2030
๊ทธ๋Ÿฐ๋ฐ, ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ์„ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์—ฌ๋Ÿฌ๋ถ„์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ต์ˆ™ํ•˜๋‹ค๋ฉด ์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”๋กœ ์•Œ ๊ฒƒ์ด๋‹ค. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด์„ ๋”ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ–ˆ๋˜ 50 ์ด ์•„๋‹Œ 2030 ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
ย 
// math.ts function sum(a: number, b: number) { return a + b; } sum('20', '30'); // Error: '20'์€ number์— ํ• ๋‹น๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
notion imagenotion image
์ด๋ฅผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•˜๊ณ  VSCode ๋กœ ํ™•์ธํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ด์ฒ˜๋Ÿผ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์„ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
ย 
ย 

1.2.2 ๋‚ด๊ฐ€ ๋„์™€์ค„๊ฒŒ - ์ž๋™์™„์„ฑ, ๊ฐ€์ด๋“œ ์—ญํ• 

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ๋ฐœ ํˆด์˜ ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ , ์šฐ๋ฆฌ ์ฑ…์—์„œ๋„ ์“ธ VScode ๋Š” ํˆด์˜ ๋‚ด๋ถ€๊ฐ€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋ผ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋‹ค. ์ข€ ๋” ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.
ย 
// math.js function sum(a, b) { return a + b; } var result = sum(20, 30); result.toLocaleString();
* toLocaleString() : ์ˆซ์ž๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ์ง€์—ญํ™” ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ
ย 
์œ„ ์ฝ”๋“œ๋Š” ์•ž์—์„œ ์‚ดํŽด๋ดค๋˜ sum() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋‘ ์ˆซ์ž์˜ ํ•ฉ์„ ๊ตฌํ•œ ๋‹ค์Œ, *toLocaleString() ๋ฅผ ์ ์šฉํ•œ ์ฝ”๋“œ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ result ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ํŒŒ์‹ฑํ•  ๋•Œ ํƒ€์ž…์ด number ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์—†๋‹ค.
ย 
์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์„œ sum() ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ number ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋ฏธ๋ฆฌ ํŒŒ์•…์„ ํ•œ ์ƒํƒœ์—์„œnumber ์˜ ๋ฉ”์„œ๋“œ์ธ toLocaleString() ๋ฅผ ์ผ์ผ์ด ๋‹ค ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ์— ์˜คํƒ€๊ฐ€ ๋‚˜์„œ toLocaleStirng() ์ด๋ผ๊ณ  ์ž‘์„ฑํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„, ์ด ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰์„ ํ•ด์•ผ๋งŒ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
ย 
// math.ts function sum(a: number, b: number): number { return a + b; } var result = sum(20, 30); result.toLocaleString();
notion imagenotion image
๋ณ€์ˆ˜ย result ์— ๋Œ€ํ•œ ํƒ€์ž…์ด ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— tol ๋งŒ ์ณ๋„ VSCode์—์„œ toLocaleString() ์„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋กœ ๋„์›Œ์ค€๋‹ค. ์ด์ฒ˜๋Ÿผ, ๋งค๋ฒˆ ๋‹ค ์ผ์ผ์ด ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž๋™์™„์„ฑ์„ ํ†ตํ•ด ์ž‘์„ฑํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์นœ์ ˆํ•˜๊ฒŒ ๊ฐ€์ด๋“œ ์—ญํ• ์„ ํ•ด์ค€๋‹ค.
ย 
๐Ÿฆ
์ง€๊ธˆ๊นŒ์ง€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜๋‹ค. ์ด์ œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํ•จ๊ป˜ ๊ตฌ์ถ•ํ•ด๋ณด๋„๋ก ํ•˜์ž.
ย