이 글은 자바스크립트 개론(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'
}


+ Recent posts