본문 바로가기
JavaScript

08 - 예외 처리 고급

by yj.yoon 2022. 7. 4.

오류에는 크게 2가지 종류가 있다. 프로그램 실행 전에 발생하는 구문 오류와 실행 중에 발생하는 런타임 오류 또는 예외(exception)가 있다.

 


고급 예외 처리
: 예외를 조금 더 쉽게 잡을 수 있는 기능으로 try catch finally 구문이 있다.

- 기본적인 형태

 

try {
// 예외가 발생할 가능성이 있는 코드
} catch (exception) {
// 예외가 발생했을 때 실행할 코드
} finally { <- 필요한 경우에만 사용
// 무조건 실행할 코드
}

 

: try {} 구문 안에서 예외가 발생하면 이를 catch {} 구문에서 처리하고, 예외 발생 여부 관계없이 실행하는 finally

 

 


예외 객체 : 예외가 발생하면 예외와 발생된 정보를 확인할 수 있는데 이러한 정보를 확인할 수 있게 해주는 것
그런데 자바스크립트는 다른 프로그래밍 언어와 비교해서 대체적으로 예외가 거의 발생하지 않는 언어 - 이는 프로그램에 수많은 버그를 일으킬 수 있는 요소가 되기도 한다.

그래서 개발자가 강제로 예외를 발생시켜줘야 하는 경우가 있다. 이때 throw 키워드를 이용해 강제로 발생시켜본다.

 

catch (exception) - 괄호 안의 exception을 예외 객체라 한다.

- 예외 객체는 name, message 속성으로 이루어져 있다.

 

예시

<script>
    try {
        const arr = new Array(9999999999999999)
    } catch (e) {
        console.log(e);
        console.log();
        console.log(`e name : ${e.name}`);
        console.log(`e message : ${e.message}`);
    }
</script>

 

 

 

예외를 강제로 발생시키기

 

<script>
    function test(object) {
        console.log(object.a + object.b)
    }

    test({})
</script>

 

- 일반적으로 object.a + object.b 가 없으니까 예외를 발생, 그리고 존재하지 않는 것이니까 예외를 발생한다. 이에 사용자는 아! 잘 못 사용하고 있군~ 하고 수정을 할 것이다.

그러나 자바스크립트는 object.a, object.b 각각 undefined가 나온다. 이를 더하면 NaN 값을 출력해 예외가 (많이) 발생하지 않는다.

그럼으로 사용자에게 강제로 이거 이렇게 안된다~~! 하고 알려줄 필요가 있다. 이것이 바로 예외를 강제로 발생시켜주기!

 

 

<script>
    function test(object) {
        if (object.a !== undefined && object.b !== undefined){
            console.log(object.a + object.b)
        } else {
            throw new Error ('a, b is not assigned')
        }
    }
    test({})
</script>