πŸ‘¨πŸ»β€πŸ’»λͺ¨λ˜ λ¦¬μ•‘νŠΈ Deep Dive [1μž₯ Type Script]

pjw__98Β·2024λ…„ 1μ›” 3일
1
post-thumbnail

πŸ“šμ±•ν„°

TypeScript κΈ°λ³Έ κ°œλ…λ“€μ— λŒ€ν•˜μ—¬

πŸ“† ν•™μŠ΅ λ‚ μ§œ

2024 / 01 / 03 (수)


πŸ‘¨πŸ»β€πŸ’» ν•™μŠ΅ λ‚΄μš©

πŸŽ―νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 무엇인가?

μš”μ¦˜ ν”„λ‘ νŠΈμ—”λ“œ νŠΈλ Œλ“œλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 선택이 μ•„λ‹Œ ν•„μˆ˜κ³Όμ •μΈκ²ƒ κ°™λ‹€.
μ–΄λ”œκ°€λ‚˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈκΈ°λ°˜μœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ½”λ”©ν•˜μ˜€λŠ”κ°€ , λ‹€λ₯Έ κ°œλ°œμžκ°€ μ½”λ”©ν•œ μ½”λ“œλ“€μ„ μ‚΄νŽ΄λ³΄κΈ°μ „μ— "제발 νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ„ μ–Έ λ˜μ–΄μžˆκΈ°λ₯Ό ..! " κΈ°λ„κΉŒμ§€ ν•˜λŠ” κ°œλ°œμžλ„ μžˆλ‹€κ³ ν•œλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 사싀 μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 크게 차이점이 μ—†λ‹€κ³ ν•œλ‹€.
즉 , νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν™•μž₯판(superSet) 이라고도 λΆˆλ¦°λ‹€.
νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν™ˆνŽ˜μ΄μ§€μ—λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό λͺ…ν™•νžˆ μ„€λͺ…ν•˜λŠ” ν•œ λ¬Έμž₯이 μžˆλŠ”λ° λ°”λ‘œ "TypeScript is JavaScript with syntax for types"λ‹€.
κΈ°μ‘΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 문법에 νƒ€μž…μ„ κ°€λ―Έν•œ 것이 λ°”λ‘œ νƒ€μž…μŠ€ν¬λ¦½νŠΈλΌκ³  λ³Ό 수 μžˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 νƒ€μž…(Daynamic Type)언어이기 λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ μ—λŸ¬λ₯Ό μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œλ§Œ 확인할 수 μžˆλ‹€λŠ” 문제점이 μžˆλ‹€.
동적 νƒ€μž… μ–Έμ–΄λΌλŠ” 점은 κ°œλ°œμžμ—κ²Œ 자유λ₯Ό μ„ μ‚¬ν•˜κΈ°λ„ ν•˜μ§€λ§Œ μ½”λ“œμ˜ 규λͺ¨κ°€ 컀질수둝 였히렀 μœ μ§€λ³΄μˆ˜ 및 λ³΄μ™„ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” κ²½μš°κ°€ λ§Žλ‹€κ³  ν•œλ‹€.

<script>
function calculator(a,b){
	return a * b 
}

calculator(5,5)//25
calculator('였','윑') // NaN
</script>

calculator ν•¨μˆ˜λŠ” 두 인수λ₯Ό λ°›μ•„ κ³±μ…ˆν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ”λ°, μ΄λŠ” μ–΄λ””κΉŒμ§€λ‚˜ a,bκ°€ 숫자일 λ•Œλ§Œ κ°€λŠ₯ν•˜κ³ , κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” κ°œλ°œμžκ°€ μ›ν•˜μ§€ μ•Šμ€ κ²°κ³Ό(λ˜λŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜λŠ” μΈ‘μ—μ„œ μ›μΉ˜ μ•ŠλŠ” κ²°κ³Ό)λ₯Ό λ§Œλ“€μ–΄ λ‚Ό 것이닀. λ¬Όλ‘  μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ νƒ€μž…μ„ μ²΄ν¬ν•΄μ„œ μ΄λŸ¬ν•œ 문제λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€.

<script>
function calculator(a,b){
if(typeof a !== 'number' || typeof b !== 'number'){
	throw new Error('a와 b λͺ¨λ‘ μˆ«μžμ—¬μ•Ό ν•©λ‹ˆλ‹€.')
}
	return a * b 
}

calculator(5,5)//25
calculator('였','윑') //Uncaught Error: a와 b λͺ¨λ‘ μˆ«μžμ—¬μ•Ό ν•©λ‹ˆλ‹€.
</script>

κ·ΈλŸ¬λ‚˜ λͺ¨λ“  ν•¨μˆ˜μ™€ λ³€μˆ˜μ— μ΄λŸ¬ν•œ νƒ€μž… 확인 μ—°μ‚°μžμΈ typeofλ₯Ό μ μš©ν•΄μ„œ μ²΄ν¬ν•˜λŠ” 것은 λ„ˆλ¬΄ 번거둭고 μ½”λ“œμ˜ 크기λ₯Ό κ³Όλ„ν•˜κ²Œ ν‚€μš°κ²Œ λœλ‹€. λͺ¨λ“  μΈμˆ˜μ— λŒ€ν•΄,그리고 μΈμˆ˜κ°€ 객체라면 λ‚΄λΆ€ ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ λͺ¨λ‘ μ²΄ν¬ν•œλ‹€λ©΄
μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μ—μ„œλŠ” μ‚¬μš©ν•  수 μžˆλŠ” κ°€μž₯ μ™„λ²½ν•œ λ°©λ²•μ΄μ§€λ§Œ κ°œλ°œμžμ—κ² λ„ˆλ¬΄λ‚˜λ„ 번거둜운 μž‘μ—…μ΄λ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μ΄λŸ¬ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•œκ³„λ₯Ό λ²—μ–΄λ‚˜ νƒ€μž… 체크λ₯Ό μ •μ μœΌλ‘œ λŸ°νƒ€μž„μ΄ μ•„λ‹Œ λΉŒλ“œ(트랜슀파일)νƒ€μž„μ— μˆ˜ν–‰ν•  수 있게 ν•΄μ€€λ‹€.

<script>
function calculator(a: number, b: number){
	return a * b 
}

// tsc둜 이 μ½”λ“œλ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ νŠΈλžœμŠ€νŒŒμΌν•˜λ©΄
/* Argument of type 'string' is 
not assignable to parameter of type 'number.' μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.*/
// 이 μ½”λ“œλŠ” νƒ€μž… λ¬Έμ œκ°€ ν•΄κ²°λ˜κΈ° μ „κΉŒμ§€ μ‚¬μš© λΆˆκ°€λŠ₯ν•˜λ‹€.
calculator('였','윑') 
</script>

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” λ³€μˆ˜μ— νƒ€μž…μœΌλ₯΄ μ„€μ •ν•  수 μžˆμœΌλ―€λ‘œ 예제의 a와 bλ³€μˆ˜μ— number νƒ€μž…μ„ μ§€μ •ν•˜λ©΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 였직 숫자만 ν• λ‹Ήν•  수 있게 λœλ‹€.
μ΄λŸ¬ν•œ νŠΉμ§• 덕뢄에 λŸ°νƒ€μž„κΉŒμ§€ κ°€μ§€ μ•Šμ•„λ„ μ½”λ“œλ₯Ό λΉŒλ“œν•˜λŠ” μ‹œμ μ— 이미 μ—λŸ¬κ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œλ₯Ό 확인해쀀닀.

➑️ λ‹€μŒκΈ€μ—μ„œλŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό λ¦¬μ•‘νŠΈ μ½”λ“œμ—μ„œ ν™œμš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.

profile
β˜„οΈ

0개의 λŒ“κΈ€