혼공스 Study - 고급예외처리 ~ 예외객체

유니·2022년 2월 9일
0

고급 예외 처리

고급 예외 처리에는 try catch finally 구문이 있다. 기본적인 구조는 아래와 같다.

try {
  // 예외가 발생할 가능성이 있는 코드
} catch(exception) {
  // 예외가 발생할 경우 실행되는 코드
} finally {
  // 예외와 상관없이 무조건 실행할 코드. 필요한 경우에만 사용
}

예시로 살펴보자

try {
    // console.log("Hi")
    errorStart.asdf();

} catch(exception) {
    alert("에러발생")
}
// finally {
//     console.log("무조건 무조건이야~")
// }

위의 js코드에서 try문에서 errorStart.asdf()를 실행시킬경우 그런 것은 존재하지않기에 catch문의 코드가 실행된다. 반대로 errorStart~를 주석처리하고 console.log("Hi")를 실행시키면 catch문이 실행되지않는것을 볼 수 있다. catch문은 에러가 발생할때만 실행되기 대문에 에러가 발생하지않으면 실행되지않는다. 이후 finally문을 실행시키면 console.log를 실행시키든 errorStart를 실행시키든 무조건 콘솔창에 해당 문구가 적히는 모습을 볼 수 있다.

errorStart 밑에 console.log 를 찍게되면 errorStart에서 이미 에러가 발생하였기에 더이상 try문을 진행하지않고 바로 catch문으로 빠져나가는 모습을 볼 수 있다.

try {
    errorStart.asdf();
    console.log("야 찍혔냐?");
  
} catch(exception) {
    alert("에러발생");
}

그러면 여기서 한가지 의문이 생길 수 있다. catch문을 놔두고 왜 finally를 써야할까??

이는 return 키워드를 통해 예시로써 알아 볼 수 있다.

function test () {
    try {
        console.log("try 시작");
        throw "예외 발생"
    } catch(exception) {
        console.log("catch 시작");
        return
    }

    console.log("try catch 끝");
}
test();

function test2 () {
    try {
        console.log("try 시작");
        throw "예외 발생"
    } catch(exception) {
        console.log("catch 시작");
        return
    }
    finally {
        console.log("try catch 끝");
    }
}
test2();

위의 코드를 실행시켜보면 test의 경우 catch에서 return 값을 주었기때문에 그 이후 console.log가 실행되지않는 모습을 볼 수 있다.

그러나 finally문으로 감싸줄 경우 return 하였음에도 finally문의 강제성 덕분에 try catch 끝 이라는 콘솔이 찍히는 모습을 볼 수 있다.

예외 객체

프로그래밍을 하다보면 예외가 생길 수 있고 그러한 예외와 발생된 정보를 확인할 수 있는데, 이러한 정보를 확인하게 해주는것이 예외 객체이다.

위의 고급 예외 처리에서 catch문 안에 (exception)을 적은 모습을 볼수있는데 (exception)이 예외 객체이다.

function test3 () {
    try {
        throw " 강제 예외 발생 "
    } catch (exception) {
        console.log("예외 발생");
        console.log(exception);
    }
}
test3();

throw문법을 이용해 강제로 예외를 발생시기고 catch문에서 console.log로 exception을 출력시키면 throw의 내용이 출력된다.

function test4 () {
    try {
        const a = new Array(9999999999999999999999999999999999);
    } catch (exception) {
        console.log(exception);
    }
}
test4();

위와 같이 자바스크립트가 처리할수있는 배열의 크기를 넘게 입력하여 강제로 오류를 발생시키고 console.log로 예외객체를 출력시키면 RangeError가 출력되고 어디에서 에러가 떳는지 파일이름과 에러가 발생한 라인을 보여주는 모습을 볼 수 있다.

profile
Prospective Junior Front-end Developer

0개의 댓글