본문 바로가기
JS

모던 자바스크립트 Deep Dive - 에러 처리

by 학식러 2024. 2. 19.

 

47장 에러 처리

에러 처리의 필요성

  • 발생한 에러를 방치하면 프로그램은 강제 종료됨
  • try catch 문을 사용해 대응하면 강제 종료되지 않고 실행 시킬수 있음.
  • 직접적인 에러를 발생하지는 않는 예외적인 상황이 발생할 수도 있음. 대응하지 않으면 에러로 이어질 가능성이 큼.

47-03

// DOM에 button 요소가 존재하지 않으면 querySelector 메서드는 에러를 발생시키지 않고 null을 반환한다.
const $button = document.querySelector('button'); // null

$button.classList.add('disabled');
// TypeError: Cannot read property 'classList' of null
  • 에러가 발생하지 않는 코드를 작성하는 것이 이상적이지만 불가능함.

try … catch … finally 문

  • 예외적인 상황이 발생하면 반환하는 값(null 또는 -1)을 if 문이나 단축 평가 또는 옵셔널 체이닝 연산자를 통해 확인해서 처리하는 방법
  • 에러 처리 코드를 미리 등록해 두고 에러가 발생하면 에러 처리 코드로 점프하는 방법
  • (try catch finally 문)

Error 객체

  • Error 생성자 함수는 에러 객체를 생성함.

47-07

const error = new Error('invalid');

throw 문

  • Error 생성자 함수로 에러 객체를 생성한다고 에러가 발생하는 것은 아님.

47-09

try {
  // 에러 객체를 생성한다고 에러가 발생하는 것은 아니다.
  new Error('something wrong');
} catch (error) {
  console.log(error);
}
  • 에러를 발생시키려면 try 코드 블록에서 throw 문으로 에러 객체를 던져야 한다.

47-10

try {
  // 에러 객체를 던지면 catch 코드 블록이 실행되기 시작한다.
  throw new Error('something wrong');
} catch (error) {
  console.log(error);
}

에러의 전파

  • 에러는 호출자(caller) 방향으로 전파됨.
  • 즉 콜스택의 아래 방향으로 전파됨.

47-12

const foo = () => {
  throw Error('foo에서 발생한 에러'); // ④
};

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

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

try {
  baz(); // ①
} catch (err) {
  console.error(err);
}

댓글