[TypeScript] μ œλ„€λ¦­(Generics)

πŸ“„ μ œλ„€λ¦­(Generics)

μ œλ„€λ¦­μ€ νƒ€μž…μ„ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ— κ°–κ²Œ ν•˜λŠ” λ¬Έλ²•μž…λ‹ˆλ‹€.

μ œλ„€λ¦­μ€ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ‹œμ μ— νƒ€μž…μ„ λ„˜κ²¨μ€λ‹ˆλ‹€.

ν‚€μ›Œλ“œ: T

function logText<T>(text: T): T {
  console.log(text);
  return text;
}
logText("ν•˜μ΄");

ν•œκ°€μ§€ νƒ€μž…λ³΄λ‹€ μ—¬λŸ¬ 가지 νƒ€μž…μ—μ„œ λ™μž‘ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©λ˜λ©° μž¬μ‚¬μš©μ„±μ΄ 높은 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ λ•Œ 자주 ν™œμš©λ©λ‹ˆλ‹€.

πŸ“„ μ™œ μ œλ„€λ¦­μ„ μ‚¬μš©ν• κΉŒ?

λ‹¨μˆœνžˆ νƒ€μž…μ„ λ°”κΏ” μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ μ€‘λ³΅μ½”λ“œκ°€ μžˆλŠ” ν•¨μˆ˜λ₯Ό 계속 μƒμ„±ν•˜λŠ” 것은 μœ μ§€λ³΄μˆ˜μ— μ’‹μ§€μ•ŠμŠ΅λ‹ˆλ‹€.

function logText(text: string) {
  console.log(text);
  return text;
}

function logNumber(num: number) {
  console.log(num);
  return num;
}
  • logText와 logNumberλŠ” 같은 λ‚΄μš©μ˜ ν•¨μˆ˜μ§€λ§Œ νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ΄ λ‹€λ₯Έ 이유둜 λ”°λ‘œ μƒμ„±λ˜μ—ˆλ‹€.
function logText<T>(text: T): T {
  console.log(text);
  return text;
}

const str = logText<string>("abc");
str.split("");
const login = logText<boolean>(true);

μ΄λ ‡κ²Œ μ œλ„€λ¦­μ„ μ‚¬μš©ν•΄μ„œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°κ°’μ„ μ§€μ •ν•œλ‹€λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ μ–΄λ–€ νƒ€μž…μ„ 지정해도 μ½”λ“œλ₯Ό 진행할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“„ μ–΄λ–€ κ²½μš°μ— μœ λ‹ˆμ˜¨νƒ€μž…μ΄ μ•„λ‹Œ μ œλ„€λ¦­μ„ μ‚¬μš©ν• κΉŒ?

μ—¬λŸ¬ νƒ€μž…μœΌλ‘œ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ₯Ό μ •μ˜ν•  경우 μœ λ‹ˆμ˜¨μ„ μ‚¬μš©ν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μœ λ‹ˆμ˜¨νƒ€μž…μ€ λ°˜ν™˜κ°’μ—μ„œ λ¬Έμ œκ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

function logText(text: string | number) {
  console.log(text);
  return text;
}

const a = logText("a");
a.split(10); //μ—λŸ¬. νƒ€μž…μ„ μ •ν™•νžˆ μ„ μ–Έν•΄μ•Όλ§Œ λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 있음.
logText(10);

textκ°€ μœ λ‹ˆμ˜¨νƒ€μž…μœΌλ‘œ stringκ³Ό number둜 μ§€μ •λ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” 문제점이 λ°œμƒν•©λ‹ˆλ‹€.

λ”°λΌμ„œ 상황에 적절히 μœ λ‹ˆμ˜¨ νƒ€μž…κ³Ό μ œλ„€λ¦­ νƒ€μž…μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

좜처

Leave a comment