🌱 47μž₯ : μ—λŸ¬μ²˜λ¦¬

μ˜€λ‹€ν˜œΒ·2022λ…„ 7μ›” 24일
0
post-thumbnail

1. μ—λŸ¬ 처리의 ν•„μš”μ„±

  • μ—λŸ¬μ— λŒ€μ²˜ν•˜μ§€ μ•ŠμœΌλ©΄ ν”„λ‘œκ·Έλž¨μ΄ κ°•μ œ μ’…λ£Œλ˜κΈ° λ•Œλ¬Έμ— try … catch 문을 μ‚¬μš©ν•΄μ„œ μ—λŸ¬μ— μ μ ˆν•˜κ²Œ λŒ€μ‘ν•΄μ•Ό ν•œλ‹€.
  • μ§μ ‘μ μœΌλ‘œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ” μ˜ˆμ™Έμ μΈ 상황에 κ²½μš°μ— μžˆμ–΄μ„œλ„ μ μ ˆν•˜κ²Œ λŒ€μ²˜ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.
    • ex) querySelectorμ—μ„œ μš”μ†Œ λ…Έλ“œ 찾을 수 μ—†λŠ” 경우 μ—λŸ¬ λŒ€μ‹  null λ°˜ν™˜

2. try … catch … finally λ¬Έ

  • μ—λŸ¬ 처리λ₯Ό ν•˜λŠ” 방법은 크게 두 가지닀.
    1. μ˜ˆμ™Έμ μΈ 상황이 λ°œμƒν•˜λ©΄ λ°˜ν™˜ν•˜λŠ” 값을 ifλ¬Έμ΄λ‚˜ 단좕 평가, μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλ₯Ό 톡해 확인 ν›„ 처리
    2. μ—λŸ¬ 처리 μ½”λ“œλ₯Ό 미리 등둝해 두고 μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ μ—λŸ¬ 처리 μ½”λ“œλ‘œ 점프 (β†’ try … catch … finally)
  • try catch finally
    • try μ½”λ“œ 블둝이 μ‹€ν–‰λœλ‹€.
    • 쀑간에 μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ λ°œμƒν•œ μ—λŸ¬κ°€ catch문의 err λ³€μˆ˜μ— μ „λ‹¬λ˜λ©° catch μ½”λ“œ 블둝이 μ‹€ν–‰λœλ‹€.
    • catch문의 err λ³€μˆ˜λŠ” try μ½”λ“œ 블둝에 ν¬ν•¨λœ λ¬Έ μ€‘μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ μƒμ„±μ΄λ˜λ©° catch μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.
    • finally μ½”λ“œ 블둝은 μ—λŸ¬ λ°œμƒκ³Ό 상관없이 λ°˜λ“œμ‹œ ν•œ 번 μ‹€ν–‰λœλ‹€.
    • try catch finally 둜 μ—λŸ¬ 처리λ₯Ό ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ΄ κ°•μ œ μ’…λ£Œλ˜μ§€ μ•ŠλŠ”λ‹€.

3. Error 객체

  • Error μƒμ„±μž ν•¨μˆ˜λŠ” μ—λŸ¬ 객체λ₯Ό μƒμ„±ν•œλ‹€.
  • Error μƒμ„±μž ν•¨μˆ˜μ—λŠ” μ—λŸ¬λ©”μ‹œμ§€λ₯Ό 인수둜 전달할 수 μžˆλ‹€.
    const error = new Error('invalid');
  • Error μƒμ„±μž ν•¨μˆ˜κ°€ μƒμ„±ν•œ μ—λŸ¬ κ°μ²΄λŠ” message, stack ν”„λ‘œνΌν‹°λ₯Ό 가진닀.
    • message : Error μƒμ„±μž ν•¨μˆ˜μ— 인수둜 μ „λ‹¬ν•œ μ—λŸ¬λ©”μ‹œμ§€
    • stack : μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¨ μ½œμŠ€νƒμ˜ 호좜 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ (디버깅 λͺ©μ μœΌλ‘œ μ‚¬μš©)
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 7개의 Error μƒμ„±μž ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€.
  • Errorλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μƒμ„±μž ν•¨μˆ˜λ“€μ΄ μƒμ„±ν•œ 객체의 ν”„λ‘œν† νƒ€μž…μ€ Error.prototype이닀.
μƒμ„±μž ν•¨μˆ˜μΈμŠ€ν„΄μŠ€
Error일반적 μ—λŸ¬ 객체
SyntaxErrorμžλ°”μŠ€ν¬λ¦½νŠΈ 문법에 λ§žμ§€ μ•ŠλŠ” 문을 해석할 λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬ 객체
ReferenceErrorμ°Έμ‘°ν•  수 μ—†λŠ” μ‹λ³„μžλ₯Ό μ°Έμ‘°ν–ˆμ„ λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬
TypeErrorν”Όμ—°μ‚°μž λ˜λŠ” 인수의 데이터 νƒ€μž…μ΄ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬ 객체
RangeErrorμˆ«μžκ°’μ˜ ν—ˆμš© λ²”μœ„λ₯Ό 벗어났을 λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬ 객체
URIErrorencodeURI λ˜λŠ” decodeURI ν•¨μˆ˜μ— λΆ€μ μ ˆν•œ 인수λ₯Ό μ „λ‹¬ν–ˆμ„ λ–„ λ°œμƒν•˜λŠ” μ—λŸ¬ 객체
EvalErroreval ν•¨μˆ˜μ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬ 객체

4. throw λ¬Έ

  • μ—λŸ¬ 객체λ₯Ό μƒμ„±ν•œλ‹€κ³  μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€κΈ° μœ„ν•΄μ„œλŠ” throw 문으둜 μ—λŸ¬ 객체λ₯Ό λ˜μ Έμ•Ό ν•œλ‹€.
  • throw 문의 ν‘œν˜„μ‹μ€ μ–΄λ–€ 값이라도 μƒκ΄€μ—†μœΌλ‚˜ μΌλ°˜μ μœΌλ‘œλŠ” μ—λŸ¬ 객체λ₯Ό μ§€μ •ν•œλ‹€.
  • μ—λŸ¬λ₯Ό λ˜μ§€λ©΄ catch 문의 μ—λŸ¬ λ³€μˆ˜(err)κ°€ μƒμ„±λ˜κ³  λ˜μ Έμ§„ μ—λŸ¬ 객체가 ν• λ‹Ήλ˜λ©° catch 문이 μ‹€ν–‰λœλ‹€.

5. μ—λŸ¬μ˜ μ „νŒŒ

  • μ—λŸ¬λŠ” 호좜자 λ°©ν–₯으둜 μ „νŒŒλœλ‹€. 즉 μ½œμŠ€νƒ μ•„λž˜ λ°©ν–₯으둜 μ „νŒŒλœλ‹€.
const foo = () => {
	throw Error('foo');
}

const bar = () => {
	foo();
}

const baz = () => {
	bar();
}

try {
	baz();
} catch (err) {
	console.error(err);
}
  • throw 된 μ—λŸ¬λ₯Ό catch ν•˜μ§€ μ•ŠμœΌλ©΄ 호좜자 λ°©ν–₯으둜 μ „νŒŒκ°€ 되기 λ•Œλ¬Έμ— 적절히 μΊμΉ˜ν•΄μ•Ό ν•œλ‹€.
  • μ–΄λ””μ—μ„œλ„ catchλ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ ν”„λ‘œκ·Έλž¨μ΄ κ°•μ œ μ’…λ£Œλœλ‹€.
  • 비동기 ν•¨μˆ˜λŠ” μ½œμŠ€νƒμ΄ λ‹€ λΉ„μ–΄μ•Ό 싀행이 되기 λ•Œλ¬Έμ— ν˜ΈμΆœμžκ°€ μ—†μ–΄ μ—λŸ¬λ₯Ό μ „νŒŒν•  ν˜ΈμΆœμžκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
profile
ν”„λ‘ νŠΈμ—”λ“œμ— λ°±μ—”λ“œ ν•œ μŠ€ν‘Ό πŸ₯„

0개의 λŒ“κΈ€