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); // 각 행 번호가 있는 중첩된 호출들의 목록
}
'공부공부 > JS 딥다이브' 카테고리의 다른 글
[js 딥다이브] 48장 모듈 (0) | 2024.02.18 |
---|---|
[js 딥다이브] 46장 제네레이터와 async await (0) | 2024.02.18 |
[js 딥다이브] 45장 프로미스 (0) | 2024.02.18 |
[js 딥다이브] 44장 REST API (0) | 2024.02.18 |
[js 딥다이브] 43장 Ajax (0) | 2024.02.18 |