JavaScript에서 에러 객체(Error object)는 실행 시간(runtime) 에러가 발생했을 때 생성되는 객체입니다. 이 객체는 에러에 대한 상세한 정보를 담고 있으며, 프로그래머가 에러 처리를 보다 효과적으로 할 수 있게 돕습니다. 에러 객체는 Error 생성자 함수를 사용하여 직접 생성할 수도 있습니다.
기본 에러 객체
JavaScript의 Error 객체는 다음과 같은 주요 속성을 가지고 있습니다:
- message: 에러 메시지를 문자열로 담고 있습니다. 이 메시지는 에러가 무엇인지 설명합니다.
- name: 에러의 이름을 담고 있는 문자열입니다. 기본 에러 객체의 경우, **"Error"**라는 이름을 가집니다.
let error = new Error("Something went wrong");
console.log(error.message); // Something went wrong
console.log(error.name); // Error
내장 에러 유형
JavaScript는 Error 외에도 여러 가지 내장 에러 유형을 제공합니다. 각각의 에러 유형은 다양한 에러 상황을 나타냅니다:
- RangeError: 숫자 변수나 파라미터가 유효한 범위를 벗어났을 때 발생합니다.
- ReferenceError: 존재하지 않는 변수를 참조하려고 할 때 발생합니다.
- SyntaxError: 코드에 문법적 오류가 있을 때 발생합니다.
- TypeError: 변수나 파라미터가 예상된 타입이 아닐 때 발생합니다.
- URIError: encodeURI() 또는 decodeURI() 같은 글로벌 URI 처리 함수에 부적절한 파라미터가 제공됐을 때 발생합니다.
에러 객체 확장
Error 객체를 확장하여 사용자 정의 에러를 만들 수 있습니다. 이를 통해 특정 에러 상황에 맞는 추가 정보를 에러 객체에 포함시킬 수 있습니다.
class CustomError extends Error {
constructor(message, data) {
super(message); // 부모 클래스의 생성자 호출
this.name = "CustomError"; // 에러 이름 설정
this.data = data; // 추가 데이터
}
}
try {
throw new CustomError("Custom error occurred", { userId: 1 });
} catch (error) {
console.log(error.name); // CustomError
console.log(error.message); // Custom error occurred
console.log(error.data); // { userId: 1 }
}
에러 객체의 사용
에러 객체는 에러 처리(try...catch 문)에서 유용하게 사용됩니다. catch 블록에서 에러 객체를 받아 에러의 상세 정보를 로그에 기록하거나, 에러에 따라 적절한 대응을 할 수 있습니다.
에러 객체를 활용하면 에러 상황을 보다 명확하게 이해하고, 프로그램의 안정성을 높이는 데 도움을 줍니다.
JavaScript에서 에러 처리는 프로그램이 예상치 못한 상황을 만났을 때 안전하게 반응하고, 가능한 회복하도록 돕는 중요한 부분입니다. 에러 처리를 통해 애플리케이션의 안정성과 사용자 경험을 향상시킬 수 있습니다.
try...catch 문
JavaScript에서 가장 기본적인 에러 처리 방법은 try...catch 문을 사용하는 것입니다. try 블록 안에는 예외가 발생할 수 있는 코드를 넣고, catch 블록 안에는 에러가 발생했을 때 실행할 코드를 작성합니다.
try {
// 에러가 발생할 수 있는 코드
console.log(undefinedVariable); // 정의되지 않은 변수 접근
} catch (error) {
// 에러 처리 코드
console.error("Caught an error:", error);
}
finally 절
finally 절은 에러 발생 여부와 상관없이 실행되어야 하는 코드를 포함시킬 때 사용합니다. 이는 자원을 정리하거나, 중요한 후처리 작업을 수행하는 데 유용합니다.
try {
// 에러가 발생할 수 있는 코드
} catch (error) {
// 에러 처리 코드
} finally {
// 에러 발생 여부와 상관없이 실행될 코드
console.log("finally 절은 항상 실행됩니다.");
}
에러 던지기 (Throwing Errors)
특정 조건에서 프로그램이 에러를 발생시키도록 강제할 수 있습니다. 이를 위해 throw 키워드를 사용하며, 던져진 에러는 가장 가까운 catch 블록에 의해 처리됩니다.
function checkNumber(num) {
if (isNaN(num)) {
throw new Error("입력값은 숫자여야 합니다.");
}
console.log("Valid number:", num);
}
try {
checkNumber("not a number");
} catch (error) {
console.error(error.message);
}
비동기 에러 처리
비동기 코드에서의 에러 처리는 조금 다른 접근이 필요합니다. 프로미스를 사용하는 경우, .catch() 메서드를 사용해 비동기 작업에서 발생하는 에러를 처리할 수 있습니다.
javascriptCopy code
fetch("<https://nonexistent.url>")
.then(response => response.json())
.catch(error => console.error("Fetch error:", error));
**async/await**를 사용하는 경우, 비동기 함수 호출을 try...catch 문으로 감싸서 에러를 처리할 수 있습니다.
async function fetchData() {
try {
const response = await fetch("<https://nonexistent.url>");
const data = await response.json();
} catch (error) {
console.error("Async fetch error:", error);
}
}
fetchData();
에러 처리는 프로그램의 안정성을 유지하고, 예기치 않은 상황에서 사용자에게 적절한 피드백을 제공하는 데 필수적입니다. 따라서 에러가 발생할 가능성이 있는 모든 곳에서 적절한 에러 처리 로직을 구현하는 것이 좋습니다.
'javascript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
후기 (0) | 2024.03.09 |
---|---|
모듈(module) (0) | 2024.02.22 |
제너레이터 (Generators)와 async/await (0) | 2024.02.22 |
콜백 헬(Callback Hell)과 프로미스(Promises) (0) | 2024.02.21 |
REST API (0) | 2024.02.21 |