오류에는 크게 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>
'JavaScript' 카테고리의 다른 글
09 -2 게터(getter)와 세터(setter), static 속성과 메소드, 오버라이드 (2) | 2022.07.05 |
---|---|
07 - localStorage 객체 - 예시 (1) | 2022.06.27 |
07 -2 키보드 이벤트로 별 이동하기 (0) | 2022.06.27 |
07 -2 자바스크립트 문서 객체 - 이벤트, 이벤트 모델 (0) | 2022.04.12 |
06 -3 얕은 복사(참조 복사)와 깊은 복사(... 전개 연산자) (0) | 2021.12.13 |