공부공부/JS 딥다이브

[js 딥다이브] 47장 에러처리

고생쨩 2024. 2. 18. 10:05
728x90

에러처리

에러처리의 필요성

예외상황 대응

try catch finally


try {

// 실행할 코드(에러가 발생할 가능성이 있는 코드)

} catch (err) {

// try 코드 블록에서 에러가 발생하면 이 코드 블록의 코드가 실행된다.

// err에는 try 코드 블록에서 발생한 Error 객체가 전달된다.

} finally {

// 에러 발생과 상관없이 반드시 한 번 실행된다.

}

Error 객체

생성자 함수 인스턴스
Error 일반적 에러 객체
SyntaxError 자바스크립트 문법에 맞지 않는 문을 해석할 때 발생하는 에러 객체
ReferenceError 참조할 수 없는 식별자를 참조했을 때 발생하는 에러 객체
TypeError 피연산자 또는 인수의 데이터 타입이 유효하지 않을 때 발생하는 에러 객체
RangeError 숫자값의 허용 범위를 벗어났을 때 발생하는 에러 객체
URIError encodeURI 또는 decodeURI 함수에 부적절한 인수를 전달했을 때 발생하는 에러 객체
EvalError eval 함수에서 발생하는 에러 객체

throw 문

throw로 에러를 던져줘야 발생됨.

에러의 전파

호출자 방향으로 전파

커스텀 에러

Error를 상속받아 커스텀 에러를 만들 수 있음.

예를 들어 FE에서 API 통신 에러인 경우 APIError, BE에서 DB 접근 에러인 경우 DBError 등

JS의 에러 내장 코드


class Error {

constructor(message) {

this.message = message; // 에러 메시지

this.name = "Error"; // 에러로 표시될 이름

this.stack = [call stack]; // stack에 대한 상세 설명은 https://lannstark.github.io/nodejs/stacktrace/1 참고

}

}

커스텀 에러 생성과 테스트


class ValidationError extends Error {

constructor(message) {

super(message); // (1)

this.name = "ValidationError"; // (2)

}

}

  

function test() {

throw new ValidationError("에러 발생!");

}

  

try {

test();

} catch(err) {

alert(err.message); // 에러 발생!

alert(err.name); // ValidationError

alert(err.stack); // 각 행 번호가 있는 중첩된 호출들의 목록

}

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.