본문 바로가기
개발 공부 일지/JavaScript

자바스크립트 - 에러도 객체다

by yelimu 2024. 7. 20.

자바스크립트는 코드가 실행되는 도중에 에러가 발생하면 자동으로 에러 객체를 생성한다. 

 

에러메시지는 에러객체의 이름name 프로퍼티와 메시지message 프로퍼티 로 구성되어있는 객체이다 

 

대표적인 에러 종류 

1) ReferenceError 존재하지 않는 변수나 함수를 호출 시 

2) TypeError 잘못된 방식으로 자료형을 다루려고 할 때

3) SyntaxError 문법에 맞지않는 코드


의도적으로 에러 만들기

 

 

1. 새로운 에러 객체 만들기 : 에러객체의 이름을 함수처럼 호출해서 아규먼트로 원하는 메시지 전달 

 

const error = new TypeError('원하는 메시지를 출력합니다.');

 

이렇게 하면 name: TypeError, message : '원하는 블라블라' 프로퍼티를 갖는 에러 객체가 만들어짐

console.log(error.name);

console.log(error.message);

 

2. 에러 발생시키기 

 

throw error;

 

에러 동작 & 그 뒤의 코드는 실행되지 않음 (프로그램 종료)


try...catch 문 

 

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

 

try {
  console.log('에러 전');
  
  const codeit = '코드잇';
  console.log(codeit)
  
  codeit = 'codeit';                         > 위에서 const 로 선언한 변수 codeit 를 재할당하려고 해서 오류가 난다
  
  const language = 'JavaScript';
  console.log(language);
} catch (error){                            > 에러 객체는 error 또는 err 또는 e 로 많이 쓴다
  console.log('에러 후 동작되는 코드');

  console.log(error);                          > 에러 객체가 나타난다

  console.error(error);                       > log 가 아닌 error 메소드를 사용하면 '실제 에러 메시지'처럼 출력된다 

  console.log(e.name);                      > 에러객체 이름 프로퍼티

  console.log(e.message);                 > 에러객체 메시지 프로퍼티
}

 

//출력값 

에러 전
코드잇
에러 후 동작되는 코드

console.log(error);
console. error (error);

 

try문 내에서 오류 발생 후의 코드는 실행되지 않고 바로 catch 문으로 넘어간다


활용편쓰

 

함수내부에서 try catch 문 사용하기 

출처 : 코드잇 강의

printMember 함수는 파라미터로 배열을 받는것을 가정하고 작성된 코드임

codeit 변수에 객체를 받아서 함수를 실행시키고 있음 -> 오류가 발생, 프로그램이 종료됨

이때 try catch 문을 사용하면 오류가 나더라도 프로그램이 종료되지않을 수 있음

 

try문과 catch문 각각은 코드 블록이므로 각 블록에서 let이나 const로 선언된 변수는 해당 블럭 밖에서 사용될 수 없음

 

 

try...catch문은 실행이 가능한 코드 내에서의 에러를 다룬다 (?)

ex  문법에 어긋나는 코드(변수에 하이픈 사용 등) 를 작성하면 SyntaxError 발생하면서 코드를 실행조차 하지 않는다 

실행이 가능한 코드에서 발생한 에러를 예외 Exception 이라고 하고,

해당 에러를 다루는 것을 예외처리 Exception Handling이라고 한다


try {
  // 실행할 코드
} catch (err) {
  // 에러가 발생했을 때 실행할 코드
} finally {
  // 항상 실행할 코드
}

 

try 문에서 에러 발생 시 > catch 코드가 모두 실행된 다음 finally 코드 실행

try 문에서 에러 없으면 > try 코드가 모두 실행된 다음에 finally 코드 실행

 

finally 문에서 에러 처리가 필요하면 다시 try,,,catch문을 중첩해서 사용한다