[Typescript] μ œλ„ˆλ¦­(Generic)

[원본 링크]

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ„ 일반적인 타이핑 μ–Έμ–΄λ“€κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ νƒ€μž… μΌλ°˜ν™” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.

μ œλ„ˆλ¦­μ„ μ‰½κ²Œ λ§ν•˜λ©΄, νƒ€μž… μ •μ˜μ— ꡬ멍을 λš«μ–΄λ†“κ³  κ·Έλ•Œκ·Έλ–„ μ±„μ›Œμ„œ μ“Έ 수 μžˆλ„λ‘ ν•˜λŠ” 것이닀.




ν•¨μˆ˜ μ œλ„ˆλ¦­

ν•¨μˆ˜μ—λŠ” λ‹€μŒκ³Ό 같이 μ œλ„ˆλ¦­ νŒŒλΌλ―Έν„°λ₯Ό μ„€μ •ν•˜κ³  μ‚¬μš©ν•  수 μžˆλ‹€.
ν•¨μˆ˜λͺ… 였λ₯Έμͺ½μ— κΊ½μ‡  μ—΄κ³ , μž„μ˜λ‘œ μ‚¬μš©ν•  νƒ€μž…λͺ…을 적은 뒀에, ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•˜λ©΄ λ˜λŠ” 것이닀.
그럼 λ‹€μŒκ³Ό 같이 ν˜ΈμΆœν•  수 μžˆλ‹€.

보톡 ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ μ „λ‹¬μ‹œμ— νƒ€μž… νŒŒλΌλ―Έν„° 좔둠이 되기 λ•Œλ¬Έμ—, ꡳ이 νƒ€μž…λͺ…을 λͺ…μ‹œν•΄μ„œ ν˜ΈμΆœν•˜λŠ” κ²½μš°λŠ” 거의 μ—†λ‹€.




클래슀 μ œλ„ˆλ¦­

ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ„ λ‹Ήμ—°νžˆ μ œλ„ˆλ¦­μ΄ μ§€μ›λœλ‹€.
λ§ˆμ°¬κ°€μ§€λ‘œ 클래슀λͺ…, μΈν„°νŽ˜μ΄μŠ€λͺ… 였λ₯Έμͺ½μ— κΊ½μ‡  μ—΄κ³  νƒ€μž… νŒŒλΌλ―Έν„°λ₯Ό 적으면 λœλ‹€.



νƒ€μž… μ œλ„ˆλ¦­

λ”ν•΄μ„œ, νƒ€μž… alias에도 μ œλ„ˆλ¦­μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

이런걸 μ΄μš©ν•΄μ„œ λ©”νƒ€ν”„λ‘œκ·Έλž˜λ°λ„ ν•˜κ³  κ·ΈλŸ¬λŠ”λ°, 그런건 μ°¨μ°¨ 닀뀄보겠닀.




μ œλ„ˆλ¦­ ν•¨μˆ˜μ˜ νƒ€μž…

이건 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μž¬λ―ΈμžˆλŠ” λΆ€λΆ„ 쀑 ν•˜λ‚˜λ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” νƒ€μž…μ΄ κ΅¬μ²΄ν™”λ˜μ§€ μ•Šμ€ ν•¨μˆ˜ μ œλ„ˆλ¦­ μžμ²΄λ„ κ°’μœΌλ‘œμ„œ μ‚¬μš©ν•  μˆ˜κ°€ μžˆλ‹€.
νƒ€μž…μ˜ ν‘œν˜„λ²•μ€ λŒ€λž΅ λ‹€μŒκ³Ό κ°™λ‹€. κΈ°μ‘΄ ν•¨μˆ˜νƒ€μž… μ™Όμͺ½μ— νƒ€μž…νŒŒλΌλ―Έν„°λ§Œ μΆ”κ°€λœ ν˜•νƒœλ‹€.
<νƒ€μž…νŒŒλΌλ―Έν„°>(λ§€κ°œλ³€μˆ˜...)=>λ°˜ν™˜νƒ€μž…

보톡 μ œλ„ˆλ¦­μ‹œμŠ€ν…œμ΄ μ‘΄μž¬ν•˜λŠ” λ‹€λ₯Έ μ–Έμ–΄λ“€μ—μ„œλŠ”, μ œλ„ˆλ¦­μ€ 껍데기일 뿐이라 이런건 잘 μ•ˆλ˜λŠ” νŽΈμ΄λ‹€.




μ œλ„ˆλ¦­ μ œμ•½μ‘°κ±΄

그런데, μ œλ„ˆλ¦­ νƒ€μž…μ„ λ°›λŠ”λ‹€κ³  해도 λ‹€λ₯Έ λ¬Έμ œλ“€μ΄ λ‚¨μ•„μžˆλ‹€.

μ œλ„ˆλ¦­ νƒ€μž…μ€ 말 κ·ΈλŒ€λ‘œ λͺ¨λ“  νƒ€μž…μ΄ κ±΄λ„ˆμ˜¬ 수 μžˆλ‹€λŠ” 뜻이고, ν•΄λ‹Ή μ œλ„ˆλ¦­μ„ κ΅¬ν˜„ν•  μ‹œμ μ—λŠ” μ–΄λ–€ νƒ€μž…μ΄ λ“€μ–΄μ˜¬ μ§€λ₯Ό μ•Œ μˆ˜κ°€ μ—†λ‹€.
무슨 νƒ€μž…μΈμ§€λ₯Ό λͺ¨λ₯΄λ‹ˆ 무슨 값이 λ“€μ–΄μžˆλŠ”μ§€λ„ λͺ¨λ₯΄κ³ , μ–΄λ–€ λ©”μ„œλ“œκ°€ μžˆλŠ”μ§€λ„ λͺ¨λ₯Έλ‹€.

λ•Œλ¬Έμ— μ•„λž˜μ²˜λŸΌ ν•¨μˆ˜κ°€ λ“€μ–΄μ˜¬ 것을 κΈ°λŒ€ν•˜κ³  ν•¨μˆ˜μ˜ lengthλ₯Ό κ°€μ Έμ˜€λ €κ³  해도, μ»΄νŒŒμΌλŸ¬λŠ” 그것을 μ•Œ μˆ˜κ°€ μ—†μœΌλ‹ˆ μ—λŸ¬λ₯Ό λ˜μ§„λ‹€.

이런 문제λ₯Ό ν•΄κ²°ν•˜κ³ μž μ‚¬μš©ν•˜λŠ” 것이 λ°”λ‘œ νƒ€μž… νŒŒλΌλ―Έν„°μ— μ œμ•½μ„ κ±°λŠ” 것이닀.

νƒ€μž… νŒŒλΌλ―Έν„° μ˜†μ— extends둜 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ§€μ •ν•΄μ£Όλ©΄, ν•΄λ‹Ή ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” νƒ€μž…κ°’λ§Œμ΄ νƒ€μž… νŒŒλΌλ―Έν„°λ‘œ λ“€μ–΄μ˜¬ 수 있게 λœλ‹€.

그리고 ν•΄λ‹Ή ν΄λž˜μŠ€μž„μ„ 보μž₯ν•  수 μžˆμœΌλ‹ˆ μš°λ¦¬κ°€ λ°”λΌλ˜ 값듀을 κΊΌλ‚΄μ˜¬ 수 μžˆλ‹€!

μ œμ•½μ‘°κ±΄μ— λ§žμ§€ μ•ŠλŠ” 값이 λ“€μ–΄μ˜¨λ‹€λ©΄ 였λ₯˜λ₯Ό λ˜μ§„λ‹€.

extendsλ₯Ό μ—¬λŸ¬κ°œ ν•˜κ³ μ‹Άλ‹€λ©΄ &둜 μ—°κ²°ν•œλ‹€.

μ œλ„ˆλ¦­μ„ μ‚¬μš©ν•œλ‹€λ©΄ μ΄λŸ°μ‹μœΌλ‘œ μ œμ•½μ„ κ±Έμ–΄μ„œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  일이 λ§Žμ„ 것이닀.

참고둜, κΈ°λ³Έ μ—°μ‚°μžλŠ” μ œλ„ˆλ¦­ νƒ€μž… κ°’μ—λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

μ • ν•˜κ³ μ‹Άλ‹€λ©΄ any같은걸 μ¨μ•Όν•œλ‹€.


μ°Έμ‘°
https://www.typescriptlang.org/docs/handbook/2/generics.html