JavaScript

자바스크립트 예외처리

ktko 2017. 5. 22. 11:56

자바스크립트 예외처리

프로그램이 실행되는 동안 문제가 발생하면 프로그램이 자동으로 중단됩니다. 문제가 발생할 경우 프로그램안에서 대처하여 처리할 수 있는 것이 예외처리 라고 합니다. 예외는 기본 예외처리와 고급 예외 처리가 있습니다.

조건문으로 사전에 해결하는 것은 기본 예외 처리라 하고, 고급 예외 처리에 대해서는 아래 포스팅으로 작성해보았습니다.


try, catch, finally, throw 설명


try : 실행될 코드가 입력됩니다. 이 코드에는 예외가 발생할 수 있는 코드가 포함될 수도 있습니다.

catch : try 블록 내에서 발생할 경우 호출되는 블록

finally : try 블록 안에서 예외가 발생하거나, 발생하지 않거나 상관 없이 무조건 실행되는 블록

throw : 예외를 발생시키다라는 것은 에러나 예외 상황을 알린다는 뜻이고, 예외를 강제로 발생시켜야 할 경우가 생길 때는 throw를 사용합니다. 자세한 사용 방법은 아래 예제를 확인하면 됩니다.


catch나 finally는 생략될 수 있지만 try 블록은  catch나 finally 중 적어도 하나 이상의 블록과 함게 사용되어야만 합니다.

try { * 실행할 코드를 입력한다. * 정상이라면 문제없이 실행된다. 하지만 경우에 따라 예외가 발생할 수 있다. * 예외는 throw 문에 의해 발생할 수도 있고, 예외를 발생시키는 메서드에 의해 발생할 수도 있다. } catch (error) { * 이 블록 내부의 문장들은 오직 try 블록에서 예외가 발생할 경우에만 실행된다. * 이 문장들에선 지역 변수 e를 사용하여 Error 객체 또는 앞에서 던진 다른 값을 참조할 수 있다. * 이 블록에서는 어떻게든 그 예외를 처리할 수도 있고, * 그냥 아무것도 하지 않고 예외를 무시할 수도 있고, * 아니면 throw 를 사용해서 예외를 다시 발생시킬 수도 있다. } finally { * 이 블록에는 try 블록에서 일어난 일에 관계없이 무조건 실행될 코드가 위치한다. * 이 코드는 try 블록이 어떻게든 종료되면 실행된다. * try 블록이 종료되는 상황은 다음과 같다. * 1) 정상적으로 블록의 끝에 도달했을 때 * 2) break, continue 또는 return 문에 의해서 * 3) 예외가 발생했지만 catch 절에서 처리했을 때 * 4) 예외가 발생했고 그것이 잡히지 않은 채 퍼져나갈 때 }


예외처리 예제1 (try,catch,finally 예제)



function exceptionExcute() { try { console.log("try excute"); fake(); console.log("try excute"); } catch(e) { console.log("catch excute"); console.log(e.name + "::" + e.message); } finally { console.log("finally excute"); } }



예외처리 예제2 (throw 사용하기)

function exceptionExcute() {
try { console.log("try excute"); var a = 1; var b = 0; if( b == 0) { throw { name : 'divideByZeroException', message : '0으로 나눌 수 없습니다'} } } catch(e) { console.log("catch excute"); console.log(e.name + "::" + e.message); } finally { console.log("finally excute"); } }



예외처리 예제3 (Exception 정의하기)



function userException(name, message) {
    this.name = name;
    this.message = message;
}

function exceptionHandling() {
    try {
        var a = 1;
        var b = 0;
        
        if( b == 0) {
            throw new userException('divideByZeroException', '0으로 나눌 수 없습니다');
        }
    } catch(e) {
        console.log(e.name + "::" + e.message);
    } finally {
        console.log("finally excute");
    }
}


예외처리 예제4 (중첩예외처리부분)

function userException(name, message) {
    this.name = name;
    this.message = message;
}

function exceptionHandling() { try { var a = 1; var b = 0; if( b == 0) { throw new userException('divideByZeroException', '0으로 나눌 수 없습니다'); } } catch(e) { if(e instanceof userException) { console.log(e.name + "::" + e.message); } if(e instanceof dataValidationException) { console.log(e.name + "::" + e.message); } } finally { console.log("finally excute"); } }

자바에서는 발생하는 exception에 따라 catch가 여러개 있지만 자바스크립트에서는 instanceof를 활용하여 발생하는  Exception을 분기처리 할 수 있습니다.