ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 47_Error Handling
    모던 자바스크립트 딥 다이브 독학 2024. 1. 7. 17:50

    에러 처리의 필요성

    • 에러가 발생하지 않는 코드를 작성하는 것은 불가능하다. 에러는 언제나 발생할 수 있으므로 발생한 에러에 대해 대처하지 않고 방치하면 프로그램은 강제 종료된다.
    • try … catch 문을 사용해 발생한 에러에 적절하게 대응하면 프로그램이 강제 종료되지 않고 계속해서 코드를 실행시킬 수 있다.
    • 에러 처리 방법은 크게 두 가지로, querySelector나 Array#find 메서드처럼 예외적인 상황이 발생하면 반환하는 값(null 또는 -1)을 if 문이나 단축 평가 또는 옵셔널 체이닝 연산자를 통해 확인해서 처리하는 방법, 에러 처리 코드를 미리 등록해 두고 에러가 발생하면 에러 처리 코드로 점프하도록 하는 방법이 있다.(try…catch…finally)
    • 언제나 에러나 예외적인 상황이 발생할 수 있다는 것을 전제하고 이에 대응하는 코드를 작성하는 것이 중요하다.

    try.. catch… finally 문

    try {
        // 실행할 코드(에러가 발생할 가능성이 있는 코드)
    } catch (err) {
        // try 코드 블록에서 에러가 발생하면 이 코드 블록의 코드가 실행된다.
        // err에는 try 코드 블록에서 발생한 Error 객체가 전달된다.
    } finally {
        // 에러 발생과 상관없이 반드시 한 번 실행된다.
    }
    
    //try… catch… finally 문으로 에러를 처리하면 프로그램이 강제 종료되지 않는다.
    console.log('[end]'); // [end]
    

    Error 객체

    Error 생성자 함수는 에러 객체를 생성, Error 생성자 함수에는 에러를 상세히 설명하는 에러 메시지를 인수로 전달할 수 있다.

    const error = new Error('메시지');

    Error 생성자 함수

    • Error
    • SyntaxError
    • ReferenceError
    • TypeError
    • RangeError
    • URIError
    • EvalError

    throw 문

    Error 생성자 함수로 에러 객체를 생성한다고 에러가 발생하는 것이 아니다. 에러 객체 생성과 에러 발생은 다르다.

    에러를 발생시키려면 try 코드 블록에서 throw 문으로 에러 객체를 던져야 한다.

    throw 표현식;
    // 일반적으로 throw 문의 표현식은 에러 객체를 지정한다. 
    // 에러를 던지면 catch 문의 에러 변수가 생성되고 던져진 에러 객체가 할당된다.
    // 그리고 catch 코드 블록이 실행되기 시작한다.
    try {
        throw new Error('something wrong');
    } catch (error) {
        console.log(error);
    }

    에러의 전파

    에러는 호출자 방향으로 전파된다. 콜 스택의 아래 방향(실행 중인 실행 컨텍스트가 푸시되기 직전에 푸시된 실행 컨텍스트 방향)으로 전파된다.

    • throw 된 에러를 캐치하지 않으면 호출자 방향으로 전파된다.
    • throw 된 에러를 캐치하여 적절히 대응하면 프로그램을 강제 종료시키지 않고 코드의 실행 흐름을 복구할 수 있다.
    • throw된 에러를 어디에서도 캐치하지 않으면 프로그램은 강제 종료된다.
    • 비동기 함수인 setTimeout이나 프로미스 후속 처리 메서드의 콜백 함수는 호출자가 없어서 에러를 전파할 호출자가 존재하지 않는다.

    '모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글

    48_Module  (0) 2024.01.08
    46_async/await  (1) 2024.01.05
    45_Promise  (2) 2024.01.04
    44_REST API  (0) 2024.01.03
    43_Ajax  (0) 2024.01.01
Designed by Tistory.