이 글은 자바스크립트 개론(Eloquent JavaScript 번역서)를 읽고 개인적으로 정리한 내용입니다.
4. 오류 처리
코드 상의 오류
- 자바스크립트에서는 함수에 인자를 더 적게 전달하더라도 에러가 나지 않고
undefined
이 전달될 뿐이다. 그리고undefined
이 담긴 매개변수로 수식 연산을 한다고 해도 오류가 발생되지 않고 결과는NaN
이 된다. - 반면 오류를 인식하는 경우도 있다. 예로
undefined
에서 프로퍼티를 읽으려 하거나 존재하지 않는 함수를 호출할 때 자바스크립트는 오류임을 알린다.
외부 입력에 의한 오류
- 보통 사용자의 입력에 의해 일어나며 유효성 검증을 통해 무엇이 잘못되었는지 알려야 한다.
값을 반환하여 오류처리
- 예로 정상적으로 동작할 때 문자열을 반환하는 함수는 잘못된 인자가 전달될 경우에
undefined
을 반환하도록 할 수 있다. - 하지만 이 방법은 모든 타입의 값을 반환할 수 있는 함수라면, 어떤 값이 반환됐을 때 오류가 발생한 것인지 구별하기 어렵다.
- 또 함수를 호출하는 모든 곳에서 오류 검사 코드를 작성해야 하는 단점도 있다.
예외 처리
- 예외를 발생시키게(던지게) 되면 현재 실행 흐름에서 벗어나는 것과 동시에 함수가 호출되면서 쌓여있던 호출 스택을 풀어버린다.
try
문은 예외가 발생했을 때 호출 스택이 모두 풀어지지 않게 오류가 발생하는 지점을 감싼다.catch
문은try
에서 발생한 예외를 잡아서 처리한다.finally
문은 예외 발생여부와 관계없이 실행되어야 하는 코드를 작성할 수 있다.
function sum(a, b) {
if(typeof a != 'number' || typeof b != 'number') {
throw '숫자를 전달하세요.';
} else {
return a + b;
}
}
function callSum(a, b) {
return sum(a, b);
}
try {
callSum(1, '1');
} catch (error) {
console.log('에러 발생', error);
} finally {
console.log('언제나 실행');
}
오류 객체
new
키워드와Error
생성자를 이용하여 자바스크립트의 기본 에러 메시지와 비슷한 메시지를 출력할 수 있다.
try {
throw new Error('custom error object');
} catch (e) {
console.log(e.message); // 'custom error object'
}