본문 바로가기

JavaScript/Modern JavaScript

[JavaScript] try catch 문

다음의 코드를 보면, const  키워드로 선언한 변수에 새로운 값인 '이훈이' 를 재할당 하려고 했기 때문에 에러가 발생한다.

// try catch 문
console.log('에러 전');

const name = '신짱구';
console.log(name);

name = '이훈이';

const language = 'JavaScript';
console.log(language);

console.log('에러 후');

이 에러 때문에 language 변수와 에러 후 문자열은 출력되지 않음.

 

이때, try catch 문을 활용하면 된다.

 

[try catch]

try {
  //코드
} catch (error) {
  //에러가 발생했을 때 동작할 코드
}

try 블록에서는 동작시킬 코드를 작성하고, try 블록 안의 코드에서 에러가 발생한다면 그 때 동작할 코드를 catch 문에 작성하면 된다.

error 가 발생했을 때 프로그램이 바로 종료되는것이 아닌, catch 문에 작성한 코드가 동작함.

 

try {
  console.log('에러 전');

  const name = '신짱구';
  console.log(name);

  name = '이훈이';

  const language = 'JavaScript';
  console.log(language);
} catch (error) {
  console.log('에러 후');
}

위의 에러코드는 이와같이 작성할 수 있는데, 

 

try 문의 에러가 발생한 시점부터는 코드가 실행되지 않고, 그 이후 catch 문에 있는 코드가 실행된다.

 

 

반대로 에러가 발생한 코드를 코멘트 처리하면,

try {
  console.log('에러 전');

  const name = '신짱구';
  console.log(name);

  // name = '이훈이';

  const language = 'JavaScript';
  console.log(language);
} catch (error) {
  console.log('에러 후');
}

에러가 발생하지 않았기 때문에, catch 문에 있는 코드가 출력되지 않는다.

 


try 문 안에서도 에러가 발생하면, 똑같이 에러객체가 생성되는데 console 에 바로 출력되는 것이 아닌, catch 문의 error 라는 파라미터에 전달된다. 보통 e, err, error 라고 작성한다.

 

에러객체와 에러객체의 name, message 를 출력해보면

try {
  console.log('에러 전');

  const name = '신짱구';
  console.log(name);

  name = '이훈이';

  const language = 'JavaScript';
  console.log(language);
} catch (e) {
  console.log('에러 후');
  console.log(e);
  console.log(e.name);
  console.log(e.messgae);
}

이와 같이 에러객체의 정보가 잘 출력된다.

 

 

참고로 에러 객체를 출력할 때, 익숙한 모습으로 출력하고 싶다면 다음처럼 console.error 메소드를 사용하면 된다.