12. generic

๐Ÿ“ ์™„์„ฑํŒŒ์ผ



๐Ÿ’ก **
**


1. ์ œ๋„ค๋ฆญ๊ฐœ์š”

๐Ÿ”น

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

2. ํ•จ์ˆ˜์™€ ํƒ€์ž…

๐Ÿ“ข ํ•จ์ˆ˜์— ํƒ€์ž…์„ ์„ ์–ธํ•ด๋ณด์ž

basic.ts

  1. ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž
/**
 * 06 functions & types
 * **/

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

  1. ๋ฐ˜ํ™˜๊ฐ’์˜ ํƒ€์ž…์ง€์ •
function add(a: number, b: number): number | string {
	return a + b;
}

basic.ts

  1. output ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž
function output(value:any){
	console.log(value)
}
output("์ถœ๋ ฅ")

  1. ๋ฐ˜ํ™˜ํƒ€์ž…์ด void ๋กœ ํ™•์ธ๋œ๋‹ค
  2. void ๋Š” null, undefined ์™€ ๊ฐ™์€ ๋น„์–ด์žˆ๋Š” ๊ฐ’์˜ ์˜๋ฏธ์ด๋‚˜ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ๋น„์–ด์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค
  3. return ์„ ํ•จ์ˆ˜์— ์ถ”๊ฐ€ํ›„ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํƒ€์ž…์„ ํ™•์ธํ•˜๋ฉด any ๋กœ ๋ณ€๊ฒฝ๋œ๊ฒƒ์„ ๋ณผ์ˆ˜์žˆ๋‹ค

3. ์ œ๋„ค๋ฆญ

3-1 ์˜ˆ์ œ

basic.ts

  1. insertAtBeginning ํ•จ์ˆ˜ ์ž‘์„ฑ
function insertAtBeginning(array:any[],value:any){
	const newArr=[value,...array] //1
	return newArr; //2
}
  1. newArr ์— spred operator ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ value ์™€ ๋ฐฐ์—ด์„ ์—ฐ๊ฒฐํ•œ๋‹ค
  2. newArr ์„ ๋ฆฌํ„ดํ•œ๋‹ค

  1. ๋‹ค์Œ ํ•จ์ˆ˜ ์ž‘์„ฑ
const testArr = [1, 2, 3]; //1
const updateArr = insertAtBeginning(testArr, -1); //2
  1. testArr ์— ๋ฐฐ์—ด๋กœ ์•„๋ฌด ์ˆซ์ž๋‚˜ ๋„ฃ๋Š”๋‹ค
  2. updateArr ์— insertAtBeginningํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ธ์ž๋กœ testArr ๊ณผ -1 ์„ ์ „๋‹ฌํ•œ๋‹ค
  3. updataArr์˜ ๋ฆฌํ„ด๊ฐ’์€ ์ตœ์ข…์ ์œผ๋กœ [-1,1,2,3] ์ด ๋ ๊ฒƒ์ด๋‹ค
  4. ํ™•์ธํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ๊ฐ ๋ฌธ์žฅ์˜ ํƒ€์ž…์ด๋‹ค. ๋งˆ์šฐ์Šค๋ฅผ ๋ณ€์ˆ˜๋ช…์œ„์— ์˜ฌ๋ ค์„œ ์ถ”๋ก ๋œ ํƒ€์ž…์„ ํ™•์ธํ•ด๋ณด์ž
    ์•„๋ž˜์˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ testArr ์€ number , updateArr ์€ any๋กœ ํ™•์ธ์ด ๋œ๋‹ค

updateArr ์—์„œ inserAtBeginning ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ง€๋ฉด์„œ any ํƒ€์ž…์œผ๋กœ ์ง€์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ

array ์˜ ํƒ€์ž…์„ number ๋กœ ์ง€์ •ํ• ๊ฒฝ์šฐ ๋ฌธ์žํ˜•ํƒœ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ์ˆซ์ž๋ฅผ ํ™œ์šฉํ• ์ˆ˜ ์—†์œผ๋ฏ€๋กœ any๋ฅผ ์จ์•ผํ•œ๋‹ค๋Š” ์ „์ œ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

  1. typescript ๋Š” insertAtBeginning ํ•จ์ˆ˜ ๋‚ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์€ any ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ํ•˜๋ฉฐ ํ•˜์œ„ ๋ชจ๋“  ๊ฐ์ฒด, ๊ฐ’์€ anyํƒ€์ž…์œผ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ ๋ณต์žกํ•œ ์ผ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ any ํƒ€์ž…์˜ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ”ผ ํ• ๋•Œ๊ฐ€ ์žˆ๋‹ค

ํ•˜์ง€๋งŒ any ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ํ˜ธ์ถœ ์ดํ›„ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์€ ๋ชจ๋‘ any ํƒ€์ž…์œผ๋กœ ์ถ”๋ก ๋˜์–ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ• ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค.
  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์ž
updateArr[0].splice('')

์œ„์˜ ํ•จ์ˆ˜๋Š” ์ปดํŒŒ์ผํ›„ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์ง€๋งŒ ์‹คํ–‰์‹œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
splice ํ•จ์ˆ˜๋Š” ๋ฌธ์ž ํƒ€์ž…์—๋งŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ด๊ณ  updateArr ์˜ ํƒ€์ž…์€ any ์ด๋‹ค.
ํ•˜์ง€๋งŒ ์‹ค์งˆ์ ์œผ๋กœ updateArr ๋‚ด๋ถ€์— ์ €์žฅ๋œ ๊ฐ’ testArr์˜ ํƒ€์ž…์€ number ์ด๋ฉฐ
์ตœ์ข…์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ splice ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์—†๋Š” number ์ž๋ฃŒํ˜•์— ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค

  1. Generic ์„ ์‚ฌ์šฉํ•œ ํ•ด๊ฒฐ

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๊ฒ€์ถœ๋˜๋Š”๊ฒƒ์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค

function insertAtBeginning<T>(array: T[], value: T) {
	const newArr = [value, ...array];
	return newArr;
}
const testArr = [1, 2, 3];
const updateArr = insertAtBeginning(testArr, -1);
updateArr[0].splice("");//updateArr์—๋Š” number ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜
console.log(updateArr[0].splice(""));
  1. ๋ฌธ์ž์ž๋ฃŒํ˜•์„ ์ „๋‹ฌํ•ด๋ณด์ž
  2. insertAtBeginning ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ธ์ž๋กœ string ์„ ์ „๋‹ฌํ•œ๋‹ค.
const stringArr = insertAtBeginning(["a", "b"], "c");
stringArr[0].split("");
console.log(stringArr[0].split(""));

b. generic type ์œผ๋กœ ์ง€์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ „๋‹ฌ๋œ ๊ฐ’์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ์ถ”๋ก ๋œ๋‹ค.

  1. ์ปดํŒŒ์ผ
npx tsc
  1. ์‹คํ–‰ํ™•์ธ

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ