try...catch
문에서 에러를 던질 때, 두 가지 방법 사이의 차이를 알아보겠습니다
- 에러를 그대로 던지는 경우 (
throw error
): - 새로운 에러 객체를 생성하여 던지는 경우 (
throw new Error(error.message)
):
1. throw error
try {
// something to try...
} catch (error) {
console.error("Error fetching data:", error);
throw error;
}
- 기존 에러 객체:
catch
블록에서 잡힌 원래의 에러 객체를 그대로 다시 던집니다. - 스택 트레이스 보존: 원래의 스택 트레이스가 보존됩니다. 즉, 에러가 처음 발생한 위치와 관련된 디버깅 정보가 유지됩니다.
- 에러 타입 보존: 원래 에러의 타입이 그대로 유지됩니다. 예를 들어,
TypeError
,ReferenceError
등.
2. throw new Error(error.message)
try {
// something to try...
} catch (error) {
console.error("Error fetching data:", error);
throw new Error(error.message);
}
- 새로운 에러 객체: 원래 에러 객체로부터 새로운
Error
객체를 생성하여 던집니다. - 스택 트레이스 초기화: 새로운
Error
객체를 생성하면, 스택 트레이스는catch
블록이 시작된 시점부터 시작합니다. 원래 에러가 발생한 위치에 대한 디버깅 정보는 사라집니다. - 에러 타입 변경: 모든 에러가
Error
객체로 변환됩니다. 원래의 에러 타입 (TypeError
,ReferenceError
등)은 사라지고, 단순히Error
타입으로 던져집니다.
예시
원래 에러 던지기 (throw error
)
try {
// Something that may throw an error
throw new TypeError("This is a type error");
} catch (error) {
console.error("Caught error:", error);
throw error; // Re-throw the original error
}
- 출력:
Caught error: TypeError: This is a type error at ...
- 던져진 에러:
TypeError: This is a type error
- 스택 트레이스: 원래 에러가 발생한 위치 포함
새로운 에러 객체 생성하여 던지기 (throw new Error(error.message)
)
try {
// Something that may throw an error
throw new TypeError("This is a type error");
} catch (error) {
console.error("Caught error:", error);
throw new Error(error.message); // Throw a new error with the same message
}
- 출력:
Caught error: TypeError: This is a type error at ...
- 던져진 에러:
Error: This is a type error
- 스택 트레이스:
catch
블록에서 새로운 에러가 발생한 위치부터 시작
결론
throw error
: 원래 에러를 다시 던져서 원래의 디버깅 정보와 타입을 유지하고자 할 때 사용합니다.throw new Error(error.message)
: 새로운 에러 메시지를 만들거나, 원래의 에러 정보를 변경하고자 할 때 사용합니다. 하지만 원래의 스택 트레이스와 타입 정보는 잃게 됩니다.
대부분의 경우, 원래 에러를 다시 던져서 디버깅 정보를 보존하는 것이 더 유용합니다. 새로운 에러 객체를 생성하여 던지는 경우는 매우 특별한 상황에서만 필요할 수 있습니다.
'javascript' 카테고리의 다른 글
[240801 TIL] ConvertToWebP(sharp) (0) | 2024.08.01 |
---|---|
[240710 TIL] 빈객체 확인 (0) | 2024.07.10 |
[240706 TIL] class 프로퍼티 선언법 두가지 (0) | 2024.07.07 |
[240626 TIL] createObjectUrl (0) | 2024.06.26 |
[240527 TIL] 날짜 유효성 검사 (0) | 2024.05.27 |