[๐Ÿค–] TypeScript ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ: ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๊ตฌํ˜„์ฒด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ

TypeScript์—์„œ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋ฐ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๊ตฌํ˜„์ฒด์˜ ๊ด€๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ ค์š”.

22๋ถ„
๋‹จ์–ด: 1,957๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.


๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

TypeScript ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์˜ ํ•ต์‹ฌ์ธ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๊ตฌํ˜„์ฒด์˜ ๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ , ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜€ ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, 10๋…„ ์ด์ƒ ๊ฒฝ๋ ฅ์˜ ์‹œ๋‹ˆ์–ด ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€ ๋ธ”๋ฃจ์˜ˆ์š”. ์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋”ฉ ์—ฌ์ •์— ์‹ค์งˆ์ ์ธ ๋„์›€์„ ๋“œ๋ฆฌ๊ณ ์ž ์ด ์ž๋ฆฌ์— ์žˆ์–ด์š”.

์˜ค๋Š˜์€ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ๊ทธ ์ž ์žฌ๋ ฅ์„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ 'ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ'์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด ๋ณผ๊นŒ ํ•ด์š”. ํŠนํžˆ, ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๊ตฌํ˜„์ฒด์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•œ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ๊ฒฌ๊ณ ํ•˜๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

๐Ÿง ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ, ์™œ ํ•„์š”ํ• ๊นŒ์š”?

TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„์•ผ ํ•  ๋•Œ, ์–ด๋–ป๊ฒŒ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?
์•„๋งˆ๋„ ์œ ๋‹ˆ์˜จ ํƒ€์ž…(Union Type)์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ค ํ…๋ฐ์š”, ์ด ๋ฐฉ์‹์ด ํ•ญ์ƒ ์ตœ์ ์˜ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ ์ˆ˜ ์žˆ์–ด์š”.

0๏ธโƒฃ ๋‹ค์–‘ํ•œ ์ธ์ž ํƒ€์ž… ์ฒ˜๋ฆฌ์˜ ์–ด๋ ค์›€

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž ๋˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด์š”. ์œ ๋‹ˆ์˜จ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฑฐ์˜ˆ์š”.

function processInput(input: string | number): string | number { if (typeof input === "string") { return input.toUpperCase(); // ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ } else { return input * 2; // ์ˆซ์ž ์ฒ˜๋ฆฌ } } const result1 = processInput("hello"); // result1์˜ ํƒ€์ž…์€ string | number const result2 = processInput(10); // result2์˜ ํƒ€์ž…์€ string | number // ๋ฌธ์ œ์ : result1์ด ๋ฌธ์ž์—ด์ž„์„ ํ™•์‹ ํ•ด๋„, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ์ „ํžˆ string | number๋กœ ์ธ์‹ํ•ด์š”. // ๊ทธ๋ž˜์„œ ๋ณ„๋„์˜ ํƒ€์ž… ์ขํžˆ๊ธฐ(Type Narrowing)๊ฐ€ ํ•„์š”ํ•ด์š”. const len = (result1 as string).length; // ํƒ€์ž… ๋‹จ์–ธ ํ•„์š”

์œ„ ์ฝ”๋“œ์—์„œ processInput ํ•จ์ˆ˜๋Š” ์ธ์ž์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ฐ˜ํ™˜ ํƒ€์ž…๋„ ๋‹ฌ๋ผ์ ธ์š”. ํ•˜์ง€๋งŒ TypeScript๋Š” result1์ด๋‚˜ result2์˜ ํƒ€์ž…์„ string | number๋กœ ์ถ”๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ˜ํ™˜๋œ ๊ฐ’์˜ ์ •ํ™•ํ•œ ํƒ€์ž…์„ ์•Œ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ํƒ€์ž… ์ขํžˆ๊ธฐ๋‚˜ ํƒ€์ž… ๋‹จ์–ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ฒจ์š”. ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ•ด์น˜๊ณ  ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์š”.

1๏ธโƒฃ ๋” ๋ช…ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•œ ํƒ€์ž… ์ •์˜์˜ ํ•„์š”์„ฑ

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ '๋งŒ์•ฝ ๋ฌธ์ž์—ด์„ ๋„ฃ์œผ๋ฉด ๋ฌธ์ž์—ด์ด ๋‚˜์˜ค๊ณ , ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ์ˆซ์ž๊ฐ€ ๋‚˜์˜จ๋‹ค'๋Š” ๋ช…ํ™•ํ•œ ๊ณ„์•ฝ์„ TypeScript์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”. ์ฆ‰, ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ๋” ์ง๊ด€์ ์ด๊ณ  ์•ˆ์ „ํ•œ ํƒ€์ž… ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ฃ .
ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œ์ผœ ์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ •์˜ํ•จ์œผ๋กœ์จ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์ ์— TypeScript๊ฐ€ ๊ฐ€์žฅ ์ ์ ˆํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ•˜์—ฌ ๋” ์ •ํ™•ํ•œ ํƒ€์ž… ์ถ”๋ก ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค˜์š”.

๐Ÿš€ TypeScript ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ํ•ต์‹ฌ ๊ฐœ๋…

ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์€ ๋ฐ”๋กœ '์‹œ๊ทธ๋‹ˆ์ฒ˜(Signature)'์™€ '๊ตฌํ˜„์ฒด(Implementation)'์˜ˆ์š”. ์ด ๋‘˜์˜ ๊ด€๊ณ„๋ฅผ ์ •ํ™•ํžˆ ์•Œ์•„์•ผ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

0๏ธโƒฃ ์‹œ๊ทธ๋‹ˆ์ฒ˜(Signature)์™€ ๊ตฌํ˜„์ฒด(Implementation)

์ •๋ณด

์‹œ๊ทธ๋‹ˆ์ฒ˜(Signature): ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ '์„ ์–ธ'์ด์—์š”. ํ•จ์ˆ˜์˜ ์ด๋ฆ„, ์ธ์ž์˜ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜, ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ ๊ตฌ์„ฑ๋˜์ฃ . ๋งˆ์น˜ ํ•จ์ˆ˜์˜ '๊ณ„์•ฝ์„œ'์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ผ์š”. TypeScript๋Š” ์ด ์‹œ๊ทธ๋‹ˆ์ฒ˜๋“ค์„ ๋ณด๊ณ  ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์š”.

๊ตฌํ˜„์ฒด(Implementation): ์‹ค์ œ๋กœ ํ•จ์ˆ˜์˜ ๋กœ์ง์ด ๋‹ด๊ฒจ ์žˆ๋Š” '๋ณธ์ฒด'์˜ˆ์š”. ์˜ค๋ฒ„๋กœ๋“œ๋œ ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ตฌํ˜„์ฒด๋Š” ๋ฐ˜๋“œ์‹œ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•ด์š”. ์ด ๊ตฌํ˜„์ฒด๋Š” ์ •์˜๋œ ๋ชจ๋“  ์˜ค๋ฒ„๋กœ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผ ํ•ด์š”.

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

1๏ธโƒฃ ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ •์˜ํ•˜๊ธฐ

์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ํ•จ์ˆ˜ ๋ณธ๋ฌธ ์—†์ด ํƒ€์ž… ์„ ์–ธ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์š”. ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ˜ธ์ถœ ํŒจํ„ด์„ ๋ช…์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”.

// ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋“ค function add(a: number, b: number): number; // ์ˆซ์ž ๋‘ ๊ฐœ๋ฅผ ๋ฐ›์œผ๋ฉด ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ function add(a: string, b: string): string; // ๋ฌธ์ž์—ด ๋‘ ๊ฐœ๋ฅผ ๋ฐ›์œผ๋ฉด ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜

์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ add ํ•จ์ˆ˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ์„ TypeScript์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฑฐ์˜ˆ์š”. ๊ฐ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ๊ณ ์œ ํ•œ ์ธ์ž ํƒ€์ž…๊ณผ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๊ฐ€์ ธ์š”.

2๏ธโƒฃ ์˜ค๋ฒ„๋กœ๋“œ ๊ตฌํ˜„์ฒด ์ž‘์„ฑํ•˜๊ธฐ

๊ตฌํ˜„์ฒด๋Š” ์‹ค์ œ ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์œผ๋กœ ์ •์˜๋˜์–ด์•ผ ํ•ด์š”. ๋ณดํ†ต ์œ ๋‹ˆ์˜จ ํƒ€์ž…์ด๋‚˜ any ํƒ€์ž…์„ ํ™œ์šฉํ•ด์„œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์—์„œ ์ •์˜ํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์š”.

// ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋“ค function add(a: number, b: number): number; function add(a: string, b: string): string; // ์˜ค๋ฒ„๋กœ๋“œ ๊ตฌํ˜„์ฒด (๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•˜๋Š” ํƒ€์ž…) function add(a: any, b: any): any { if (typeof a === "string" && typeof b === "string") { return a + b; // ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ } else if (typeof a === "number" && typeof b === "number") { return a + b; // ์ˆซ์ž ๋ง์…ˆ } // ๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ํ˜ธ์ถœ์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ง‰์•„์ค„ ๊ฑฐ์˜ˆ์š”. // ํ•˜์ง€๋งŒ ๊ตฌํ˜„์ฒด ์ž์ฒด๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ด์š”. throw new Error("Invalid arguments provided."); } const numResult: number = add(1, 2); // numResult๋Š” number ํƒ€์ž… const strResult: string = add("hello", "world"); // strResult๋Š” string ํƒ€์ž… // add(1, 'world'); // Error: No overload matches this call.

๊ตฌํ˜„์ฒด add(a: any, b: any): any๋Š” ์œ„์—์„œ ์ •์˜ํ•œ ๋‘ ์‹œ๊ทธ๋‹ˆ์ฒ˜ (number, number์™€ string, string)๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋„“์€ ํƒ€์ž…์œผ๋กœ ์ •์˜๋˜์—ˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์—์„œ๋Š” typeof์™€ ๊ฐ™์€ ํƒ€์ž… ๊ฐ€๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์ธ์ž์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜์ฃ .

์œ ์šฉํ•œ ํŒ

๊ตฌํ˜„์ฒด์˜ ์ธ์ž ํƒ€์ž…์ด๋‚˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ์˜ค๋ฒ„๋กœ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋ช…์‹œ๋œ ํƒ€์ž…๋ณด๋‹ค ๋” ๋„“์€(general) ํƒ€์ž…์ด์–ด์•ผ ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ string๊ณผ number๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด, ๊ตฌํ˜„์ฒด๋Š” string | number๋‚˜ any๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์‹์ด์ฃ .

๐Ÿ› ๏ธ ์‹ค์ „ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ

์ด์ œ ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์–ด๋–ป๊ฒŒ ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

0๏ธโƒฃ ๋ฌธ์ž์—ด/์ˆซ์ž๋ฅผ ๋ฐ›์•„ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

formatValue ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฌธ์ž์—ด์ด ์˜ค๋ฉด ๋Œ€๋ฌธ์ž๋กœ, ์ˆซ์ž๊ฐ€ ์˜ค๋ฉด ๋‘ ๋ฐฐ๋กœ ๋ณ€ํ™˜ํ•ด ๋ณผ๊ฒŒ์š”.

// 1. ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ •์˜ function formatValue(value: string): string; function formatValue(value: number): number; // 2. ๊ตฌํ˜„์ฒด ์ž‘์„ฑ (๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„) function formatValue(value: string | number): string | number { if (typeof value === "string") { return value.toUpperCase(); } else if (typeof value === "number") { return value * 2; } throw new Error("Unsupported value type."); } // ์‚ฌ์šฉ ์˜ˆ์‹œ const formattedString = formatValue("typescript"); // formattedString: string const formattedNumber = formatValue(123); // formattedNumber: number console.log(formattedString); // "TYPESCRIPT" console.log(formattedNumber); // 246 // formatValue(true); // Error: No overload matches this call.

formatValue ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ›์œผ๋ฉด string์„, ์ˆซ์ž๋ฅผ ๋ฐ›์œผ๋ฉด number๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๋ช…ํ™•ํžˆ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์–ด์š”. ๋•๋ถ„์— ๋ฐ˜ํ™˜ ๊ฐ’์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํƒ€์ž… ๋‹จ์–ธ ์—†์ด ๋ฐ”๋กœ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋‚˜ ์ˆซ์ž ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ฃ .

1๏ธโƒฃ ๊ฐ์ฒด ์†์„ฑ์œผ๋กœ ์˜ค๋ฒ„๋กœ๋”ฉ ํ™œ์šฉํ•˜๊ธฐ

ํŠน์ • ๊ฐ์ฒด์—์„œ ์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” getProperty ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉ์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋ณผ๊ฒŒ์š”. ํŠนํžˆ, ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ ์‹œ์—๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

// 1. ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ์ •์˜ function getProperty<T, K extends keyof T>(obj: T, key: K): T[K]; function getProperty(arr: string[], index: number): string; // ๋ฐฐ์—ด ํŠนํ™” ์˜ค๋ฒ„๋กœ๋“œ function getProperty(arr: number[], index: number): number; // ๋ฐฐ์—ด ํŠนํ™” ์˜ค๋ฒ„๋กœ๋“œ // 2. ๊ตฌํ˜„์ฒด ์ž‘์„ฑ function getProperty(obj: any, key: any): any { if (Array.isArray(obj) && typeof key === "number") { return obj[key]; // ๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ ‘๊ทผ } else if (typeof obj === "object" && obj !== null && key in obj) { return obj[key]; // ๊ฐ์ฒด ์†์„ฑ ์ ‘๊ทผ } throw new Error("Invalid arguments or property not found."); } // ์‚ฌ์šฉ ์˜ˆ์‹œ const user = { name: "๋ธ”๋ฃจ", age: 10 }; const userName = getProperty(user, "name"); // userName: string const userAge = getProperty(user, "age"); // userAge: number console.log(userName); // "๋ธ”๋ฃจ" console.log(userAge); // 10 const colors = ["red", "green", "blue"]; const firstColor = getProperty(colors, 0); // firstColor: string console.log(firstColor); // "red" const numbers = [10, 20, 30]; const secondNumber = getProperty(numbers, 1); // secondNumber: number console.log(secondNumber); // 20 // getProperty(user, 'email'); // Error: Argument of type '"email"' is not assignable to parameter of type '"name" | "age"'. // getProperty(colors, 'length'); // Error: Argument of type '"length"' is not assignable to parameter of type 'number'.

์ด ์˜ˆ์ œ์—์„œ๋Š” ๊ฐ์ฒด์˜ ํ‚ค์— ์ ‘๊ทผํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ œ๋„ค๋ฆญ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๋”๋ถˆ์–ด, string[] ๋˜๋Š” number[] ๋ฐฐ์—ด์— number ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋Š” ํŠน์ • ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์–ด์š”.
์ด๋ฅผ ํ†ตํ•ด getProperty ํ•จ์ˆ˜๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋” ์ •ํ™•ํ•œ ํƒ€์ž… ์ถ”๋ก ์„ ์ œ๊ณตํ•˜๊ฒŒ ๋˜์—ˆ์ฃ .

2๏ธโƒฃ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ

ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์—์„œ๋„ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. Calculator ํด๋ž˜์Šค์˜ add ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉํ•˜์—ฌ ์ˆซ์ž ๋ง์…ˆ๊ณผ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•ด ๋ณผ๊ฒŒ์š”.

class Calculator { // 1. ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜ add(a: number, b: number): number; add(a: string, b: string): string; // 2. ๊ตฌํ˜„์ฒด add(a: any, b: any): any { if (typeof a === "number" && typeof b === "number") { return a + b; } else if (typeof a === "string" && typeof b === "string") { return a + b; } throw new Error("Invalid arguments for add method."); } } const calc = new Calculator(); const sum = calc.add(5, 3); // sum: number const concatenated = calc.add("foo", "bar"); // concatenated: string console.log(sum); // 8 console.log(concatenated); // "foobar" // calc.add(1, '2'); // Error: No overload matches this call.

ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋„ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ํ•˜๋‚˜์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ API๋ฅผ ๋”์šฑ ์œ ์—ฐํ•˜๊ณ  ํƒ€์ž… ์•ˆ์ „ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

โš ๏ธ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ ์ฃผ์˜ํ•  ์ 

ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด์š”. ์ด๋ฅผ ๊ฐ„๊ณผํ•˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํƒ€์ž… ์˜ค๋ฅ˜๋‚˜ ํ˜ผ๋ž€์„ ๊ฒช์„ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

0๏ธโƒฃ ๊ตฌํ˜„์ฒด์˜ ํƒ€์ž…์€ ๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•ด์•ผ ํ•ด์š”.

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

// Error ์˜ˆ์‹œ function process(value: string): string; function process(value: number): number; // ๊ตฌํ˜„์ฒด๊ฐ€ string๋งŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋˜์–ด ์žˆ์–ด number ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•˜์ง€ ๋ชปํ•ด์š”. function process(value: string): string { // Error: This overload signature is not compatible with its implementation signature. return value.toUpperCase(); }

์œ„ ์˜ˆ์‹œ์—์„œ ๊ตฌํ˜„์ฒด๋Š” string ํƒ€์ž…๋งŒ ๋ฐ›๋„๋ก ๋˜์–ด ์žˆ์–ด์„œ process(value: number): number; ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•ด์š”. ์ด ๊ฒฝ์šฐ, ๊ตฌํ˜„์ฒด์˜ ํƒ€์ž…์„ value: string | number์™€ ๊ฐ™์ด ๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ํ•ด์š”.

1๏ธโƒฃ ์˜ค๋ฒ„๋กœ๋”ฉ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ด์š”.

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

// ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ (๊ตฌ์ฒด์ ์ธ ๊ฒƒ -> ์ผ๋ฐ˜์ ์ธ ๊ฒƒ) function greet(name: "๋ธ”๋ฃจ"): string; // '๋ธ”๋ฃจ'๋ผ๋Š” ํŠน์ • ๋ฌธ์ž์—ด function greet(name: string): string; // ๋ชจ๋“  ๋ฌธ์ž์—ด function greet(name: any): any { if (name === "๋ธ”๋ฃจ") { return "์•ˆ๋…•ํ•˜์„ธ์š”, ๋ธ”๋ฃจ๋‹˜!"; } else { return `์•ˆ๋…•ํ•˜์„ธ์š”, ${name}๋‹˜!`; } } const specificGreet = greet("๋ธ”๋ฃจ"); // specificGreet: string (์ •ํ™•ํžˆ '์•ˆ๋…•ํ•˜์„ธ์š”, ๋ธ”๋ฃจ๋‹˜!'์œผ๋กœ ์ถ”๋ก ) const generalGreet = greet("๊น€์ฝ”๋”ฉ"); // generalGreet: string // ์ž˜๋ชป๋œ ์ˆœ์„œ (์ผ๋ฐ˜์ ์ธ ๊ฒƒ -> ๊ตฌ์ฒด์ ์ธ ๊ฒƒ) // function badGreet(name: string): string; // ์ด ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋จผ์ € ์˜ค๋ฉด ํ•ญ์ƒ ์ด๊ฒƒ๋งŒ ๋งค์นญ๋  ์ˆ˜ ์žˆ์–ด์š”. // function badGreet(name: '๋ธ”๋ฃจ'): string; // ์ด ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ์ ˆ๋Œ€ ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์–ด์š”. // function badGreet(name: any): any { /* ... */ }

์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ํŠน์ • ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…('๋ธ”๋ฃจ')๊ณผ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ํƒ€์ž…(string)์ด ์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋” ๊ตฌ์ฒด์ ์ธ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…์„ ๋จผ์ € ์„ ์–ธํ•ด์•ผ TypeScript๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋งค์นญํ•  ์ˆ˜ ์žˆ์–ด์š”.

2๏ธโƒฃ ๋ณต์žกํ•œ ๋กœ์ง์€ ํ”ผํ•˜๊ณ , ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•ด์š”.

ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•จ์ˆ˜์˜ API๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์ง€๋งŒ, ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€ ๋กœ์ง์ด ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋ฉด ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์–ด์š”. ๋งŒ์•ฝ ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ if/else if ๋ฌธ์ด๋‚˜ ๋ณต์žกํ•œ ํƒ€์ž… ๊ฐ€๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด์„ ๊ณ ๋ คํ•ด ๋ณด๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ“ ์ •๋ฆฌํ•˜๋ฉฐ: ๋” ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•ด

TypeScript์˜ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋‹จ์ˆœํ•œ ํƒ€์ž… ์ •์˜๋ฅผ ๋„˜์–ด, ํ•จ์ˆ˜์˜ ๊ณ„์•ฝ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์•ˆ์ „ํ•˜๊ณ  ์ง๊ด€์ ์ธ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์—์š”. ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ๊ตฌํ˜„์ฒด์˜ ๊ด€๊ณ„๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด์ฃ .

0๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ

  • ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜ธ์ถœ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์ธ์ž ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.
  • **์‹œ๊ทธ๋‹ˆ์ฒ˜(Signature)**๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๊ณ„์•ฝ์„ ์„ ์–ธํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์‚ฌ์šฉ์ž ๊ด€์ ์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋†’์—ฌ์ฃผ์ฃ .
  • **๊ตฌํ˜„์ฒด(Implementation)**๋Š” ์‹ค์ œ ํ•จ์ˆ˜์˜ ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์˜ค์ง ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผ ํ•ด์š”. ๋ชจ๋“  ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผ ํ•ด์š”.
  • ๊ตฌ์ฒด์ ์ธ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์ผ๋ฐ˜์ ์ธ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ณด๋‹ค ๋จผ์ € ์„ ์–ธํ•ด์•ผ ์ •ํ™•ํ•œ ํƒ€์ž… ์ถ”๋ก ์ด ์ด๋ฃจ์–ด์ ธ์š”.

1๏ธโƒฃ ๋‹ค์Œ ์•ก์…˜

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ์—์„œ string | number์™€ ๊ฐ™์€ ์œ ๋‹ˆ์˜จ ํƒ€์ž…์œผ๋กœ ์ธํ•ด ํƒ€์ž… ์ขํžˆ๊ธฐ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์› ๋˜ ํ•จ์ˆ˜๋“ค์„ ์ฐพ์•„๋ณด์„ธ์š”.
ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ ์šฉํ•˜์—ฌ ๋” ๋ช…ํ™•ํ•˜๊ณ  ํƒ€์ž… ์•ˆ์ „ํ•œ API๋กœ ๊ฐœ์„ ํ•ด ๋ณธ๋‹ค๋ฉด, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ์‹ค๋ฌด ์ ์šฉ ์ค‘ ์–ด๋ ค์šด ์ ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. ๋‹ค์Œ์—๋„ ์œ ์ตํ•œ ์ •๋ณด๋กœ ์ฐพ์•„์˜ฌ๊ฒŒ์š”!

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ