Generic

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ μ—¬λŸ¬ μƒˆλ‘œμš΄ κ°œλ…λ“€μ„ μ ‘ν–ˆλŠ”λ° 그쀑 κ°€μž₯ 많이 μ ‘ν–ˆλ˜ κ°œλ…μ΄ λ°”λ‘œ μ œλ„€λ¦­μ΄λ‹€. κ·Έλ™μ•ˆ μ œλ„€λ¦­μ΄ μ •ν™•νžˆ λ­”μ§€ μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμ—ˆλŠ”λ° 이번 κΈ°νšŒμ— κ³΅λΆ€ν•΄λ³΄μž

Generic

μ œλ„€λ¦­μ΄λž€ λ³€μˆ˜μ˜ ꡬ체적인 νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šκ³  λ‹€μ–‘ν•œ νƒ€μž…μ„ μ²˜λ¦¬ν•˜κ²Œλ” λ§Œλ“€μ–΄ μ£ΌλŠ” κΈ°μˆ μ΄λ‹€.

λ§Œμ•½ 같은 κΈ°λŠ₯의 ν•¨μˆ˜μΈλ° λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜νƒ€μž…μ΄ λ‹¬λΌμ„œ μ—¬λŸ¬κ°œμ˜ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€λ©΄ 맀우 λΉ„νš¨μœ¨μ μ΄λ‹€

function sample_Num(x: number) {
  return x;
}
function sample_Str(x: string) {
  return x;
}

μ΄λŸ¬ν•œ 뢀뢄을 μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•˜κ²Œ λ§Œλ“€μ–΄ 쀄 수 μžˆλ‹€.

function sample_G<T>(x: T) {
  return x;
}

let num_variable = sample_G < number > 1;
let str_variable = sample_G < string > "μ œλ„€λ¦­";

ν•¨μˆ˜λͺ… 뒀에 <T>λ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ λ§€κ°œλ³€μˆ˜, λ°˜ν™˜κ°’μ˜ νƒ€μž…μœΌλ‘œ 섀정이 κ°€λŠ₯ν•˜λ‹€. λ‹€λ§Œ TλŠ” νƒ€μž…μ˜ μ•½μžλ‘œμ¨ 자주 μ‚¬μš©λ˜λŠ” 것이고 λ‹€λ₯Έ 문자λ₯Ό μ‚¬μš©ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.

μ œλ„€λ¦­μœΌλ‘œ λ§Œλ“  ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 경우, ν•¨μˆ˜ν˜ΈμΆœ λΆ€λΆ„ 뒀에 <{νƒ€μž…}>의 ν˜•μ‹μœΌλ‘œ 인자의 νƒ€μž…μ„ μž‘μ„±ν•œλ‹€. (<>λ₯Ό μƒλž΅ν•  경우 μ»΄νŒŒμΌλŸ¬κ°€ 인수의 νƒ€μž…μ„ ν™•μΈν•˜μ—¬ νƒ€μž…μ„ κ²°μ •ν•œλ‹€)

κ·Έλ ‡λ‹€λ©΄ anyλŠ” μ™œ?

그런데 μœ„μ—μ„œ λ§ν•œ λ‚΄μš©μ„ μ‚΄νŽ΄λ³΄λ©΄ any ν‚€μ›Œλ“œμ™€ λ‹€λ₯Ό λ°”κ°€ μ—†λ‹€. 사싀 ꡳ이 μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜μ§€ μ•Šλ”λΌλ„ anyλ‘œλ„ μΆ©λΆ„νžˆ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μš°λ¦¬κ°€ μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λŠ” anyλŒ€μ‹  μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”

μ–΄λ–€ 값을 λ°˜ν™˜ν•˜λŠ”μ§€ μ•ŒκΈ° μœ„ν•΄μ„œμ΄λ‹€.

function sample_Any(x: any) {
  return x;
}

function sample_G<T>(x: T) {
  return x;
}

// λ°˜ν™˜κ°’ νƒ€μž… μœ μΆ”μ—μ„œ 차이가 λ°œμƒν•œλ‹€.
let any_variable = sample_Any(1);
let generic_variable = sample_G < number > 1;

any의 경우 μ–΄λ–€ 값이든지 λ°˜ν™˜λ μˆ˜ μžˆμ–΄ μ‹€μ œλ‘œ λ°˜ν™˜λ˜λŠ” 값이 무엇인지 μœ μΆ”κ°€ νž˜λ“€λ‹€. ν•˜μ§€λ§Œ μ œλ„€λ¦­μ˜ 경우 μ–΄λ–€ 값이든지 λ°˜ν™˜λ μˆ˜ μžˆλ‹€λŠ” 점은 κ°™μ§€λ§Œ, <>에 νƒ€μž…μ„ λͺ…μ‹œν•˜μ—¬ μ–΄λ–€ 값이 λ°˜ν™˜λ˜λŠ”μ§€ μœ μΆ”ν•˜κΈ° μˆ˜μ›”ν•˜λ‹€.

function sample_Any(x: any){
  return x.id;
}

function sample_G)<T>(x: T){
  // Property 'id' does not exist on type 'T'
  return x.id
}

μœ„ μ˜ˆμ‹œ μ½”λ“œκ°€ λ‘λ²ˆμ§Έ 차이점이닀. any의 경우 λ³€μˆ˜μ˜ ν”„λ‘œνΌν‹°λ₯Ό ν™•μΈν•˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ μ œλ„€λ¦­μ˜ 경우 λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜€λŠ” νƒ€μž…μ΄ 어떀것인지 μ•Œμ§€ λͺ»ν•˜κΈ° 떄문에 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

Last updated