[47장] 에러 처리

Sheryl Yun·2024년 3월 5일
0
post-thumbnail

에러 처리의 필요성

코드에서 발생 가능한 에러를 적절히 대처하지 않으면 코드가 실행 중에 강제 종료될 수 있다.

  • 강제 종료: 에러가 발생한 라인이 마치 'return'된 것처럼 이후 코드 라인을 더 이상 실행하지 않는 것

예외(Exception)

직접적으로 에러가 발생했다고는 볼 수 없지만 적절히 대응하지 않으면 에러로 이어지는 상황

  • 예: document.querySelector로 선택한 DOM이 null일 때
    • 에러는 아니기 때문에 다음 라인 실행이 되지만 이 라인을 실행하면서 이전에 반환한 null 값으로 인해 에러 발생 가능
const $button = document.querySelector('button'); // null 반환

$button.classList.add('disabled'); // TypeError 발생 (null인 DOM에서 classList 속성을 찾을 수 없음)
  • 예외 해결법 3가지: if문으로 확인, 단축 평가, 옵셔널 체이닝 연산자

try... catch... finally문 (에러 핸들링)

  • 에러를 처리하는 코드(catch 문)를 미리 등록해두고 try 문에서 에러가 발생하면 에러 처리 코드로 점프
  • finally 문은 생략 가능
    • catch 문도 생략은 가능하지만 catch가 없는 try 문은 의미가 없기 때문에 보통 생략하지 않는다.
  • 작동 방법
    • try 문 실행 중 에러 발생 시 catch 문에서 err(변수명 상관 없음) 변수를 생성하고 try 문에서 발생한 에러 객체를 err 변수에 할당
    • 이후 catch 문을 실행하여 에러를 처리
    • finally가 있으면 에러 발생(으로 인한 catch 실행 여부와 상관 없이) finally 문 내의 코드 블록을 마지막에 반드시 한 번 실행

Error 객체

  • Error 생성자 함수(new Error)로 에러 객체 생성
  • 에러를 설명하는 에러 메시지를 인수로 전달 가능
const error = new Error('invalid');
  • 생성된 에러 객체의 프로퍼티
    • message: new Error에 인수로 전달한 에러 메시지
    • stack: 에러를 발생시킨 콜 스택의 호출 정보 문자열 (디버깅에 사용됨)

자바스크립트의 7가지 Error 생성자 함수

  1. Error: 일반 에러
  2. SyntaxError: 문법 에러
  3. ReferenceError: 참조 에러
  4. TypeError: 타입 에러
  5. RangeError: 숫자 범위 에러
  6. URIError: URI에 부적절한 인수 전달 시
  7. EvalError: eval 함수 에러

throw 문

  • Error 생성자 함수는 에러 객체를 '생성'하는 역할만 한다.
  • 생성한 에러 객체로 에러를 '발생'시키려면 throw 문으로 에러를 던져야 한다.
try {
  	throw new Error('Something is wrong'); // 에러 객체 생성 후 '던짐'
} catch(err) { // catch의 err 변수가 던져진 에러를 받음
 	console.log(err); 
}
  • 에러를 던지면 catch 문의 에러 변수가 생성되고 던져진 에러 객체가 할당
  • 이후 catch 문 실행
profile
데이터 분석가 준비 중입니다 (티스토리에 기록: https://cherylog.tistory.com/)

0개의 댓글