
Javascript Error 객체를 살펴보자.
Javascript Error 객체는 런타임 오류가 발생했을 때 던져진다. 목적에 따라 커스텀하게 에러를 생성할 수도 있다.
Error 타입
일반적인 Error 생성자 외에 아래와 같이 몇가지 에러 타입이 존재한다.
- EvalError - 전역함수 eval()에서 발생하는 오류
- RangeError - 숫자/매개변수의 범위가 유효하지 않은 경우에 해당 에러가 생성된다.
- ReferenceError - 잘못된 참조를 알리는 에러이다.
- SyntaxError - 문법적인 오류가 발생할 때 생성되는 에러다.(은근 제일 많이 보이는…)
- TypeError - 자료형이 올바르지 않은 경우에 생성되는 에러다.
- URIError - encodeURI()나 decodeURI()에 잘못된 변수를 전달했을 때 발생한다.
- AggregaetError - ES12 관련 포스팅에서 언급했다시피 새로 추가된 Error 객체로, 여러 개의 에러가 발생했을 때 생성된다.
- InternalError - Javascript 내부 오류가 발생했을 때 생성된다.
에러를 던져보자.
에러를 던질 때는 throw 명령어를 통해 던지는데, try…catch 구문에서 catch 부분에 이 에러를 처리할 수 있다.
1
2
3
4
5
try {
throw new Error('에러를 던집니다.');
} catch (e) {
console.error(e); // 에러를 던집니다.
}
Error Properties
Error 객체에서 다양한 프로퍼티들이 있지만 비표준인 프로퍼티를 제외한 message, name 프로퍼티를 살펴보자.
Error.prototype.message
오류에 대한 부가설명을 보여준다. Error 생성자에 넣는다. 기본적으로는 빈 문자열이다.
1
2
3
const err = new Error('에러에 대한 설명을 합니다.');
console.error(err.message); // '에러에 대한 설명을 합니다.'
throw err;
Error.prototype.name
오류 타입을 명시한다.
1
2
3
4
// 예시
const err = new Error('$(...).tooltip is not a function');
err.name = 'TypeError';
throw err;
Error Methods
Error.prototype.toString() 으로 name, message 를 문자열로 변환해서 Error에 대한 정보를 보여줄 수 있다.
1
2
3
4
5
// 예시
const err = new Error('$(...).tooltip is not a function');
err.name = 'TypeError';
console.error(err.toString()); // TypeError: (...).tooltip is not a function
throw err;
Custom Error
로그인 API를 요청할 때 사용할 Login 할 때만 쓰일 CustomError를 만들어보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CustomLoginError extends Error {
constructor(type, err) {
switch(type) {
case 'network':
console.error('network error', err);
break;
case 'login fail':
console.log('wrong email or password');
break;
default:
console.error(err);
}
}
}
로그인 API를 요청하면서 위의 CustomError를 발생시켜보자.
1
2
3
4
5
6
7
8
9
10
try {
const result = async () => await login(); // login() 에서는 로그인 성공여부에 따라 boolean을 반환한다고 가정.
if (result) {
console.log('login success');
} else {
throw new CustomLoginError('login fail', 'wrong id or password');
}
} catch (e) {
throw new CustomLoginError('network', e);
}
이런식으로 Javascript 에서 제공하는 기본 Error 타입 외에 별도로 Custom 하게 만들어서 Error를 던져줄 수도 있다.