๐Ÿš€ ํƒ€์ž… ์ถ”๋ก : ๋ช…์‹œ์  ํƒ€์ž… ์„ ์–ธ ์ค„์ด๊ธฐ ๐ŸŽฏ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ํƒ€์ž… ์ถ”๋ก : ๋ช…์‹œ์  ํƒ€์ž… ์„ ์–ธ ์ค„์ด๊ธฐ ๐ŸŽฏ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ TypeScript์˜ ๊ฟ€ํŒ ์ค‘ ํ•˜๋‚˜์ธ 'ํƒ€์ž… ์ถ”๋ก '์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด๊ฑฐ ์ง„์งœ ๋Œ€๋ฐ•์ธ ๊ฑฐ ์•„์‹œ์ฃ ? ๐Ÿ˜Ž ํƒ€์ž… ์ถ”๋ก ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ฉด, ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง€๊ณ  ๊ฐœ๋ฐœ ์†๋„๋„ ์‘ฅ์‘ฅ ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์žฌ๋Šฅ์ด ๋น›์„ ๋ฐœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ใ…‹ใ…‹ใ…‹

๐Ÿค” ์ž ๊น๋งŒ์š”! ํƒ€์ž… ์ถ”๋ก ์ด ๋ญ์ฃ ?

ํƒ€์ž… ์ถ”๋ก ์€ TypeScript๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„ ๋Œ€์‹  ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์•Œ์•„์„œ ํŒŒ์•…ํ•˜๋Š” ๋Šฅ๋ ฅ์ด์—์š”. ๋งˆ์น˜ ์—ฌ๋Ÿฌ๋ถ„์ด ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์žฌ๋Šฅ์„ ๋ณด๊ณ  "์•„, ์ด ์‚ฌ๋žŒ ์ง„์งœ ์‹ค๋ ฅ์ž๊ตฌ๋‚˜!"๋ผ๊ณ  ๋Š๋ผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”.

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ํƒ€์ž… ์ถ”๋ก ์˜ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ€๋ณผ๊นŒ์š”? ์ค€๋น„๋˜์…จ๋‚˜์š”? ๊ณ ๊ณ ์”ฝ~ ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

๐Ÿง  ํƒ€์ž… ์ถ”๋ก ์˜ ๊ธฐ๋ณธ

TypeScript๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋˜‘๋˜‘ํ•ด์š”. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„, TypeScript๋Š” ๊ทธ ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์„ ๋ณด๊ณ  ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฒŒ ๋ฐ”๋กœ ํƒ€์ž… ์ถ”๋ก ์˜ ๊ธฐ๋ณธ์ด์—์š”!

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?

let name = "๊น€์ฝ”๋”ฉ";
let age = 25;
let isStudent = true;

์ด ์ฝ”๋“œ์—์„œ TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์š”:

  • name์€ string ํƒ€์ž…
  • age๋Š” number ํƒ€์ž…
  • isStudent๋Š” boolean ํƒ€์ž…

์–ด๋•Œ์š”? ๊ฐ„๋‹จํ•˜์ฃ ? ์ด๋ ‡๊ฒŒ TypeScript๊ฐ€ ์•Œ์•„์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์ฃผ๋‹ˆ๊นŒ, ์šฐ๋ฆฌ๋Š” ์ผ์ผ์ด ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”. ์ด๊ฒŒ ๋ฐ”๋กœ ํƒ€์ž… ์ถ”๋ก ์˜ ๋งค๋ ฅ์ด์—์š”! ๐Ÿ˜

๐Ÿ’ก ๊ฟ€ํŒ: ํƒ€์ž… ์ถ”๋ก ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ ธ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ž์‹ ์˜ ์žฌ๋Šฅ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”!

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ๋„ ์žˆ์–ด์š”. ํƒ€์ž… ์ถ”๋ก ์ด ํ•ญ์ƒ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ์—์š”. ๋•Œ๋กœ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์ฃ . ๊ทธ๋Ÿด ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๊ฑฑ์ • ๋งˆ์„ธ์š”, ์ด์–ด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”!

ํƒ€์ž… ์ถ”๋ก  ๊ธฐ๋ณธ ๊ฐœ๋…๋„ ํƒ€์ž… ์ถ”๋ก  ๊ธฐ๋ณธ ๊ฐœ๋… ๋ณ€์ˆ˜ ์„ ์–ธ let name = "๊น€์ฝ”๋”ฉ"; ํƒ€์ž… ์ถ”๋ก  name: string

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํƒ€์ž… ์ถ”๋ก ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ฃ ? ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด TypeScript๊ฐ€ ์•Œ์•„์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”. ์™„์ „ ํŽธ๋ฆฌํ•˜์ฃ ? ใ…‹ใ…‹ใ…‹

์ž, ์ด์ œ ๊ธฐ๋ณธ ๊ฐœ๋…์€ ์•Œ์•˜์œผ๋‹ˆ ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ณผ๊นŒ์š”? ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ข€ ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿš€

๐Ÿงฉ ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก 

์ž, ์ด์ œ ์ข€ ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ์‚ดํŽด๋ณผ๊นŒ์š”? ์‹ค์ œ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋‹จ์ˆœํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ณด๋‹ค๋Š” ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋“ ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์„ ๋งŒ๋‚˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ๐Ÿ˜‰

1. ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์˜ ํƒ€์ž… ์ถ”๋ก 

๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•  ๋•Œ๋„ TypeScript๋Š” ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ๋ณผ๊นŒ์š”?

let fruits = ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "์˜ค๋ Œ์ง€"];
let person = { name: "๊น€์ฝ”๋”ฉ", age: 25, isStudent: true };

์ด ๊ฒฝ์šฐ, TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์š”:

  • fruits๋Š” string[] ํƒ€์ž… (๋ฌธ์ž์—ด ๋ฐฐ์—ด)
  • person์€ { name: string; age: number; isStudent: boolean; } ํƒ€์ž…

์™€์šฐ! ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ  ์•Œ์•„์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋„ค์š”. ์ด๊ฑฐ ์™„์ „ ํŽธ๋ฆฌํ•˜์ง€ ์•Š๋‚˜์š”? ใ…‹ใ…‹ใ…‹

2. ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž… ์ถ”๋ก 

ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋„ TypeScript๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”?

function add(a: number, b: number) {
    return a + b;
}

let result = add(5, 3);

์ด ๊ฒฝ์šฐ, TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๋ก ํ•ด์š”:

  • add ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ number
  • result ๋ณ€์ˆ˜์˜ ํƒ€์ž…๋„ number

ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ๋ณด๊ณ  ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋Š” ๊ฑฐ์ฃ . ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ผ์ผ์ด ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”. ์™„์ „ ๊ฟ€์ด์ฃ ? ๐Ÿฏ

๐Ÿšจ ์ฃผ์˜์‚ฌํ•ญ: ํ•˜์ง€๋งŒ ํ•จ์ˆ˜๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด TypeScript๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹์•„์š”!

3. ์ œ๋„ค๋ฆญ๊ณผ ํƒ€์ž… ์ถ”๋ก 

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ TypeScript๋Š” ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑด ์ข€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”?

function identity<T>(arg: T): T {
    return arg;
}

let output = identity("Hello, TypeScript!");

์ด ๊ฒฝ์šฐ, TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๋ก ํ•ด์š”:

  • T๋Š” string ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ๋จ
  • output ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ string

์™€! ์ œ๋„ค๋ฆญ๊นŒ์ง€ ์ถ”๋ก ํ•œ๋‹ค๋‹ˆ, TypeScript ์ง„์งœ ๋˜‘๋˜‘ํ•˜๋„ค์š”! ๐Ÿ‘๐Ÿ‘๐Ÿ‘

๋ณต์žกํ•œ ํƒ€์ž… ์ถ”๋ก  ๊ฐœ๋…๋„ ๋ณต์žกํ•œ ํƒ€์ž… ์ถ”๋ก  ๋ฐฐ์—ด ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜"] ๊ฐ์ฒด { name: "๊น€์ฝ”๋”ฉ" } string[] { name: string }

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์ฃ ? ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๊ฐ™์€ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋„ TypeScript๊ฐ€ ์•Œ์•„์„œ ์ถ”๋ก ํ•ด์ค€๋‹ค๋‹ˆ, ์ •๋ง ํŽธ๋ฆฌํ•˜์ง€ ์•Š๋‚˜์š”? ใ…‹ใ…‹ใ…‹

์ž, ์ด์ œ ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋์ด ์•„๋‹ˆ์—์š”! ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”~ ๐Ÿƒโ€โ™€๏ธ๐Ÿ’จ

๐Ÿšง ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜์ 

์—ฌ๋Ÿฌ๋ถ„, ์ง€๊ธˆ๊นŒ์ง€ ํƒ€์ž… ์ถ”๋ก ์ด ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ๋ดค์ฃ ? ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•  ์ˆœ ์—†์–ด์š”. ํƒ€์ž… ์ถ”๋ก ์—๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค์ด ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ž์‹ ์˜ ์žฌ๋Šฅ์„ ์†Œ๊ฐœํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ๐Ÿ˜‰

1. any ํƒ€์ž…์œผ๋กœ์˜ ์ถ”๋ก 

TypeScript๊ฐ€ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์ง€ ๋ชปํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ทธ๋Ÿด ๋•Œ๋Š” any ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ๋ผ์š”. ์ด๊ฑด ์ข€ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.

let someValue;
someValue = "Hello";
someValue = 42;
someValue = true;

์ด ๊ฒฝ์šฐ, someValue์˜ ํƒ€์ž…์€ any๋กœ ์ถ”๋ก ๋ผ์š”. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด TypeScript์˜ ํƒ€์ž… ์ฒดํฌ ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์ฃ . ๐Ÿ˜ฑ

โš ๏ธ ๊ฒฝ๊ณ : any ํƒ€์ž…์€ TypeScript์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์–ด์š”. ๊ฐ€๋Šฅํ•˜๋ฉด ํ”ผํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”!

2. ์œ ๋‹ˆ์–ธ ํƒ€์ž…์œผ๋กœ์˜ ์ถ”๋ก 

๋•Œ๋กœ๋Š” TypeScript๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ ์œ ๋‹ˆ์–ธ ํƒ€์ž…์ด๋ผ๊ณ  ํ•ด์š”.

let mixedArray = [1, "two", 3, "four"];
let result = mixedArray[0];

์ด ๊ฒฝ์šฐ, TypeScript๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๋ก ํ•ด์š”:

  • mixedArray๋Š” (number | string)[] ํƒ€์ž…
  • result๋Š” number | string ํƒ€์ž…

์ด๋ ‡๊ฒŒ ๋˜๋ฉด result๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•ด์š”. number์ผ ์ˆ˜๋„ ์žˆ๊ณ , string์ผ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ๊นŒ์š”!

3. ํƒ€์ž… ๋„“ํžˆ๊ธฐ(Type Widening)

TypeScript๋Š” ๋•Œ๋•Œ๋กœ ํƒ€์ž…์„ ๋” ๋„“๊ฒŒ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ ํƒ€์ž… ๋„“ํžˆ๊ธฐ๋ผ๊ณ  ํ•ด์š”.

let x = 3;  // number๋กœ ์ถ”๋ก 
let y = [1, 2, 3] as const;  // readonly [1, 2, 3]์œผ๋กœ ์ถ”๋ก 

x์˜ ๊ฒฝ์šฐ, 3์ด๋ผ๋Š” ํŠน์ • ๊ฐ’์ด ์•„๋‹ˆ๋ผ number ํƒ€์ž…์œผ๋กœ ๋„“๊ฒŒ ์ถ”๋ก ๋ผ์š”. ๋ฐ˜๋ฉด y๋Š” as const๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ข๊ฒŒ ์ถ”๋ก ๋˜๋„๋ก ํ–ˆ์–ด์š”.

๐Ÿ’ก ํŒ: ํƒ€์ž…์„ ์ข๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด as const๋‚˜ ๋ช…์‹œ์  ํƒ€์ž… ์„ ์–ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!

4. ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž… ์ถ”๋ก 

ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฒฝ์šฐ, TypeScript๋Š” ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์ง€ ์•Š์•„์š”. ์ด๊ฑด ์ข€ ์•„์‰ฝ์ฃ ? ใ… ใ… 

function greet(name) {
    console.log(`Hello, ${name}!`);
}

greet("TypeScript");  // ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ!

์ด ๊ฒฝ์šฐ, name ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์ด any๋กœ ์ทจ๊ธ‰๋ผ์š”. ์ด๊ฑด ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์€ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”!

ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„ ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„ any ํƒ€์ž… let x; ์œ ๋‹ˆ์–ธ ํƒ€์ž… [1, "two"] ํƒ€์ž… ๋„“ํžˆ๊ธฐ let y = 3; ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ function(x) {}

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„๊ฐ€ ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ฃ ? any ํƒ€์ž…, ์œ ๋‹ˆ์–ธ ํƒ€์ž…, ํƒ€์ž… ๋„“ํžˆ๊ธฐ, ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ํƒ€์ž… ์ถ”๋ก ์ด ์™„๋ฒฝํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Ÿฐ ์ ๋“ค์„ ์ž˜ ๊ธฐ์–ตํ•ด๋‘์„ธ์š”!

์ž, ์ด์ œ ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜์ ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”. ํƒ€์ž… ์ถ”๋ก ์ด ํŽธ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ, ํ•ญ์ƒ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์„ธ์š”! ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋Ÿฐ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋” ํšจ๊ณผ์ ์œผ๋กœ ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”~ ๐Ÿš€

๐Ÿ›  ํƒ€์ž… ์ถ”๋ก  ํ™œ์šฉํ•˜๊ธฐ: ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

์ž, ์ด์ œ ํƒ€์ž… ์ถ”๋ก ์˜ ์žฅ๋‹จ์ ์„ ์•Œ์•˜์œผ๋‹ˆ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ด๊ฑธ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณผ๊นŒ์š”? ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ž์‹ ์˜ ์žฌ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ์ž˜ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ๐Ÿ˜‰

1. ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด, TypeScript๊ฐ€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”.

// ์ข‹์€ ์˜ˆ
let name = "๊น€์ฝ”๋”ฉ";  // string์œผ๋กœ ์ถ”๋ก 

// ํ”ผํ•ด์•ผ ํ•  ์˜ˆ
let age;  // any๋กœ ์ถ”๋ก 
age = 25;

์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด TypeScript๊ฐ€ ๋” ์ •ํ™•ํ•œ ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด any ํƒ€์ž…์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ฃ !

2. const ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ€๋Šฅํ•˜๋ฉด let ๋Œ€์‹  const๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. const๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด TypeScript๊ฐ€ ๋” ์ข์€ ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ํ•ด์š”.

// ์ข‹์€ ์˜ˆ
const PI = 3.14;  // 3.14๋กœ ์ถ”๋ก 

// ๋œ ์ข‹์€ ์˜ˆ
let PI = 3.14;  // number๋กœ ์ถ”๋ก 

const๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฑธ TypeScript์—๊ฒŒ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ์ •ํ™•ํ•œ ํƒ€์ž… ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•ด์ ธ์š”!

3. ํƒ€์ž… ๋‹จ์–ธ ์‚ฌ์šฉํ•˜๊ธฐ

TypeScript๊ฐ€ ์ถ”๋ก ํ•œ ํƒ€์ž…์ด ๋„ˆ๋ฌด ๋„“๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ํƒ€์ž… ๋‹จ์–ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

let someValue: any = "this is a string";
let strLength = (someValue as string).length;

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•˜์„ธ์š”! ํƒ€์ž… ๋‹จ์–ธ์„ ๋„ˆ๋ฌด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด TypeScript์˜ ์žฅ์ ์„ ๋ชป ์‚ด๋ฆด ์ˆ˜ ์žˆ์–ด์š”. ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”.

4. ์ œ๋„ค๋ฆญ ํ™œ์šฉํ•˜๊ธฐ

ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•˜๋ฉด, ๋” ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”.

function identity<T>(arg: T): T {
    return arg;
}

let output = identity("Hello");  // output์€ string์œผ๋กœ ์ถ”๋ก ๋จ

์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค์–‘ํ•œ ํƒ€์ž…๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์•„์ง€์ฃ !

5. ์ธํ„ฐํŽ˜์ด์Šค์™€ ํƒ€์ž… ๋ณ„์นญ ํ™œ์šฉํ•˜๊ธฐ

๋ณต์žกํ•œ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํƒ€์ž… ๋ณ„์นญ์„ ํ™œ์šฉํ•˜์„ธ์š”.

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

let user: Person = {
    name: "๊น€์ฝ”๋”ฉ",
    age: 25
};

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ๋„ ๋†’์•„์ ธ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ž์‹ ์˜ ์žฌ๋Šฅ์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ใ…‹ใ…‹ใ…‹

ํƒ€์ž… ์ถ”๋ก  ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ํƒ€์ž… ์ถ”๋ก  ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • let name = "๊น€์ฝ”๋”ฉ" const ์‚ฌ์šฉ const PI = 3.14 ํƒ€์ž… ๋‹จ์–ธ as string ์ œ๋„ค๋ฆญ ํ™œ์šฉ <T> ์ธํ„ฐํŽ˜์ด์Šค interface Person ํšจ๊ณผ์ ์ธ ํƒ€์ž… ์ถ”๋ก  ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํƒ€์ž… ์ถ”๋ก ์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ฃ ? ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •, const ์‚ฌ์šฉ, ํƒ€์ž… ๋‹จ์–ธ, ์ œ๋„ค๋ฆญ ํ™œ์šฉ, ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ๋ชจ์—ฌ์„œ ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ๋“ค์ด ๋ชจ์—ฌ์„œ ๋ฉ‹์ง„ ํ”„๋กœํ•„์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”! ๐Ÿ˜„

๐Ÿ’ก ๊ฟ€ํŒ: ์ด๋Ÿฐ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ํƒ€์ž… ์ถ”๋ก ์˜ ์žฅ์ ์€ ์ตœ๋Œ€ํ•œ ์‚ด๋ฆฌ๋ฉด์„œ ๋‹จ์ ์€ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์ด ๋ชจ๋‘ ์ข‹์•„์ง„๋‹ค๋Š” ๊ฑฐ์ฃ !

์ž, ์ด์ œ ํƒ€์ž… ์ถ”๋ก ์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, TypeScript์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ 100% ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์žฌ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ์ž˜ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ใ…‹ใ…‹ใ…‹

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”~ ๐Ÿš€

๐ŸŽญ ์‹ค์ „ ์˜ˆ์ œ: ํƒ€์ž… ์ถ”๋ก  ํ™œ์šฉํ•˜๊ธฐ

์ž, ์ด์ œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณผ๊นŒ์š”? ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ๐Ÿ˜‰

1. ๊ฐ„๋‹จํ•œ TODO ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

๋จผ์ € ๊ฐ„๋‹จํ•œ TODO ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”. ํƒ€์ž… ์ถ”๋ก ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด๋ณผ๊ฑฐ์˜ˆ์š”.

// Todo ํƒ€์ž… ์ •์˜
interface Todo {
    id: number;
    text: string;
    completed: boolean;
}

// ์ดˆ๊ธฐ ์ƒํƒœ
const initialTodos = [
    { id: 1, text: "TypeScript ๊ณต๋ถ€ํ•˜๊ธฐ", completed: false },
    { id: 2, text: "์žฌ๋Šฅ๋„ท ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ", completed: true }
];

// Todo ๋ชฉ๋ก ์ƒํƒœ (ํƒ€์ž… ์ถ”๋ก  ํ™œ์šฉ)
let todos = initialTodos;

// Todo ์ถ”๊ฐ€ ํ•จ์ˆ˜
function addTodo(text: string) {
    const newTodo = {
        id: todos.length + 1,
        text,
        completed: false
    };
    todos = [...todos, newTodo];
}

// Todo ์™„๋ฃŒ ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜
function toggleTodo(id: number) {
    todos = todos.map(todo =>
        todo.id === id ? { ...todo, completed: !todo.completed } : todo
    );
}

// ์‚ฌ์šฉ ์˜ˆ
addTodo("์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ ํ”„๋กœ์ ํŠธ ์ฐพ์•„๋ณด๊ธฐ");
toggleTodo(1);

console.log(todos);

์ด ์˜ˆ์ œ์—์„œ todos ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, TypeScript๊ฐ€ Todo[] ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ํ•ด์ค˜์š”. ๋˜ํ•œ addTodo์™€ toggleTodo ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…๋„ ์ž๋™์œผ๋กœ ์ถ”๋ก ๋ผ์š”. ๊น”๋”ํ•˜์ฃ ? ใ…‹ใ…‹ใ…‹

2. ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ fetcher ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ์—๋Š” ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•ด์„œ ๋ฒ”์šฉ์ ์ธ ๋ฐ์ดํ„ฐ fetcher๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.

async function fetchData<T>(url: string): Promise<T> {
    const response = await fetch(url);
    return response.json();
}

// ์‚ฌ์šฉ ์˜ˆ
interface User {
    id: number;
    name: string;
    email: string;
}

async function getUser(id: number) {
    const user = await fetchData<User>(`https://api.example.com/users/${id}`);
    console.log(user.name);  // TypeScript๊ฐ€ user๊ฐ€ User ํƒ€์ž…์ž„์„ ์•Œ๊ณ  ์žˆ์–ด์š”!
}

์ด ์˜ˆ์ œ์—์„œ fetchData ํ•จ์ˆ˜๋Š” ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•ด์„œ ์–ด๋–ค ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋“  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”. TypeScript๋Š” getUser ํ•จ์ˆ˜ ์•ˆ์—์„œ user ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์ฃ . ์™„์ „ ๋˜‘๋˜‘ํ•ด์š”! ๐Ÿ‘

3. ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ

๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฐ„๋‹จํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”. ํƒ€์ž… ์ถ”๋ก ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด๋ณผ๊ฑฐ์˜ˆ์š”.

type State = {
    user: {
        name: string;
        age: number;
    } | null;
    theme: 'light' | 'dark';
};

const initialState: State = {
    user: null,
    theme: 'light'
};

function createStore<T>(initialState: T) {
    let state = initialState;

    return {
        getState: () => state,
        setState: (newState: Partial<T>) => {
            state = { ...state, ...newState };
        }
    };
}

// ์‚ฌ์šฉ ์˜ˆ
const store = createStore(initialState);

store.setState({ theme: 'dark' });
store.setState({ user: { name: "๊น€์ฝ”๋”ฉ", age: 25 } });

console.log(store.getState());

์ด ์˜ˆ์ œ์—์„œ createStore ํ•จ์ˆ˜๋Š” ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•ด์„œ ์–ด๋–ค ํ˜•ํƒœ์˜ ์ƒํƒœ๋“  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. TypeScript๋Š” store.setState ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ๋˜๋Š” ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์ฃ . ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋™์‹œ์— ์žก์•˜์–ด์š”!

์‹ค์ „ ์˜ˆ์ œ: ํƒ€์ž… ์ถ”๋ก  ํ™œ์šฉ ์‹ค์ „ ์˜ˆ์ œ: ํƒ€์ž… ์ถ”๋ก  ํ™œ์šฉ TODO ๋ฆฌ์ŠคํŠธ let todos = initialTodos; ๋ฐ์ดํ„ฐ Fetcher fetchData<T>(url: string) ์ƒํƒœ ๊ด€๋ฆฌ createStore<T>(initialState: T) ํƒ€์ž… ์ถ”๋ก  ๊ฒฐ๊ณผ ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์‹ค์ „์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ฃ ? TODO ๋ฆฌ์ŠคํŠธ, ๋ฐ์ดํ„ฐ Fetcher, ์ƒํƒœ ๊ด€๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์šฉํ•ด ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ํ™œ์šฉํ•ด ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”! ๐Ÿ˜„

๐Ÿ’ก ๊ฟ€ํŒ: ์‹ค์ „์—์„œ๋Š” ์ด๋Ÿฐ ์˜ˆ์ œ๋“ค์„ ์กฐํ•ฉํ•ด์„œ ๋” ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ํƒ€์ž… ์ถ”๋ก ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ์ฝ”๋“œ์˜ ์–‘์€ ์ค„์ด๋ฉด์„œ๋„ ํƒ€์ž… ์•ˆ์ •์„ฑ์€ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!

์ž, ์ด์ œ ํƒ€์ž… ์ถ”๋ก ์„ ์‹ค์ „์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ดค์–ด์š”. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, TypeScript์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ 100% ํ™œ์šฉํ•˜๋ฉด์„œ๋„ ๊น”๋”ํ•˜๊ณ  ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์žฌ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ๋ฐœํœ˜ํ•ด ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ใ…‹ใ…‹ใ…‹

์ด์ œ ์šฐ๋ฆฌ์˜ TypeScript ํƒ€์ž… ์ถ”๋ก  ์—ฌํ–‰์ด ๊ฑฐ์˜ ๋๋‚˜๊ฐ€๊ณ  ์žˆ์–ด์š”. ๋งˆ์ง€๋ง‰ ์„น์…˜์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ , ์•ž์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋” ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ณ„์† ๋”ฐ๋ผ์˜ค์„ธ์š”~ ๐Ÿš€

๐ŸŽ“ ๋งˆ๋ฌด๋ฆฌ: ํƒ€์ž… ์ถ”๋ก  ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

์—ฌ๋Ÿฌ๋ถ„, ์ •๋ง ๋Œ€๋‹จํ•ด์š”! ์ง€๊ธˆ๊นŒ์ง€ TypeScript์˜ ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ดค์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋งˆ์Šคํ„ฐํ•œ ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜„ ์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ , ์•ž์œผ๋กœ์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ๊ฒŒ์š”.

๐Ÿ” ๋ฐฐ์šด ๋‚ด์šฉ ์ •๋ฆฌ

  1. ํƒ€์ž… ์ถ”๋ก ์˜ ๊ธฐ๋ณธ: TypeScript๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋Š”์ง€ ๋ฐฐ์› ์–ด์š”.
  2. ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก : ๋ฐฐ์—ด, ๊ฐ์ฒด, ์ œ๋„ค๋ฆญ ๋“ฑ ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ์˜ ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”.
  3. ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„: any ํƒ€์ž…, ์œ ๋‹ˆ์–ธ ํƒ€์ž…, ํƒ€์ž… ๋„“ํžˆ๊ธฐ ๋“ฑ ํƒ€์ž… ์ถ”๋ก ์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜์ ์— ๋Œ€ํ•ด ๋ฐฐ์› ์–ด์š”.
  4. ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค: ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •, const ์‚ฌ์šฉ, ์ œ๋„ค๋ฆญ ํ™œ์šฉ ๋“ฑ ํƒ€์ž… ์ถ”๋ก ์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ดค์–ด์š”.
  5. ์‹ค์ „ ์˜ˆ์ œ: TODO ๋ฆฌ์ŠคํŠธ, ๋ฐ์ดํ„ฐ fetcher, ์ƒํƒœ ๊ด€๋ฆฌ ๋“ฑ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์–ด์š”.

๐Ÿš€ ์•ž์œผ๋กœ์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ

ํƒ€์ž… ์ถ”๋ก ์„ ๋งˆ์Šคํ„ฐํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถ”๋ฉด ์•ˆ ๋ผ์š”! ๊ณ„์†ํ•ด์„œ ๋ฐœ์ „ํ•ด ๋‚˜๊ฐ€์•ผ ํ•ด์š”. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ์š”?

  • ๋” ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ ๋„์ „ํ•˜๊ธฐ: ์‹ค์ œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž… ์ถ”๋ก ์„ ํ™œ์šฉํ•ด๋ณด์„ธ์š”. ๋” ๋งŽ์€ ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.
  • TypeScript ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌํ•˜๊ธฐ: GitHub, Stack Overflow ๋“ฑ์—์„œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ์ง€์‹์„ ๊ณต์œ ํ•˜์„ธ์š”. ์ƒˆ๋กœ์šด ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”!
  • ์ตœ์‹  ํŠธ๋ Œ๋“œ ๋”ฐ๋ผ๊ฐ€๊ธฐ: TypeScript๋Š” ๊ณ„์† ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด์š”. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ํŒจํ„ด๋“ค์„ ๊พธ์ค€ํžˆ ํ•™์Šตํ•˜์„ธ์š”.
  • ๋‹ค๋ฅธ ๊ธฐ์ˆ ๊ณผ ๊ฒฐํ•ฉํ•˜๊ธฐ: React, Vue, Node.js ๋“ฑ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋“ค๊ณผ TypeScript๋ฅผ ๊ฒฐํ•ฉํ•ด ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”. ์‹œ๋„ˆ์ง€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์–ด์š”!

๐Ÿ’ก ๊ฟ€ํŒ: ํƒ€์ž… ์ถ”๋ก ์€ TypeScript์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ๋งŒ๋Šฅ์€ ์•„๋‹ˆ์—์š”. ๋•Œ๋กœ๋Š” ๋ช…์‹œ์ ์ธ ํƒ€์ž… ์„ ์–ธ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ค‘์š”ํ•ด์š”!

์—ฌ๋Ÿฌ๋ถ„, ์ •๋ง ๋Œ€๋‹จํ•ด์š”! ์ด์ œ TypeScript์˜ ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”. ์ด ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ๋” ์•ˆ์ „ํ•˜๊ณ , ๋” ํšจ์œจ์ ์ด๊ณ , ๋” ๋ฉ‹์ง„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ์Šต๋“ํ•ด ๋” ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ใ…‹ใ…‹ใ…‹

์•ž์œผ๋กœ๋„ ๊ณ„์†ํ•ด์„œ ํ•™์Šตํ•˜๊ณ  ์„ฑ์žฅํ•ด ๋‚˜๊ฐ€์„ธ์š”. TypeScript์™€ ํ•จ๊ป˜๋ผ๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์—ฌ์ •์€ ๋”์šฑ ์ฆ๊ฒ๊ณ  ํ’์„ฑํ•ด์งˆ ๊ฑฐ์˜ˆ์š”. ํ™”์ดํŒ…! ๐Ÿ’ช๐Ÿ˜„

ํƒ€์ž… ์ถ”๋ก  ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ํƒ€์ž… ์ถ”๋ก  ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ๊ธฐ๋ณธ ๊ฐœ๋… ์‹ค์ „ ํ™œ์šฉ ์ง€์†์  ํ•™์Šต

์ด ๊ทธ๋ฆผ์€ ์—ฌ๋Ÿฌ๋ถ„์˜ TypeScript ํƒ€์ž… ์ถ”๋ก  ๋งˆ์Šคํ„ฐ ์—ฌ์ •์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์–ด์š”. ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , ์‹ค์ „์—์„œ ํ™œ์šฉํ•˜๋ฉฐ, ์ง€์†์ ์œผ๋กœ ํ•™์Šตํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด์ฃ . ์ด ์—ฌ์ •์€ ๋์ด ์—†์–ด์š”. ๊ณ„์†ํ•ด์„œ ์„ฑ์žฅํ•˜๊ณ  ๋ฐœ์ „ํ•ด ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๐Ÿ˜„

์ž, ์ด์ œ ์ •๋ง ๋์ด์—์š”. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ TypeScript ํƒ€์ž… ์ถ”๋ก ์˜ ๋‹ฌ์ธ์ด ๋˜์—ˆ์–ด์š”! ์ด ์ง€์‹์„ ํ™œ์šฉํ•ด ๋” ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ์žฌ๋Šฅ๋„ท์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒˆ๋กœ์šด ์žฌ๋Šฅ์„ ๋ฝ๋‚ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ํ•ญ์ƒ ์‘์›ํ•˜๊ณ  ์žˆ์„๊ฒŒ์š”. ํ™”์ดํŒ…! ๐ŸŽ‰๐Ÿš€