구문 오류와 예외
프로그램 실행 전에 발생하는 오류
- 구문 오류(SyntaxError)
프로그램 실행 중에 발생하는 오류
- 런타임 오류 + 예외(exception)
구문 오류는 다음과 같이 괄호를 닫지 않았을 때 오류가 발생한다.
console.log("안녕하세요!"
만약 아래와 같이 console.log 여러 개 작성했을 때 마지막 console.log에 괄호를 닫지 않았다면 모두 출력되지 않는다.
왜냐하면 구문오류는 프로그램 실행 전에 발생하는 오류이기 때문이다.
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!"
console.log를 console.rog와 같이 작성한다면
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.log("안녕하세요!")
console.rog("안녕하세요!")
5개는 출력이 되고 나머지 console.rog와 같이 잘못 작성한 부분은 예외가 발생하는 걸 볼 수 있다.
기본 예외 처리
조건문을 사용해서 예외가 발생하지 않게 만드는 것을 기본 예외 처리라고 부른다.
다음 코드와 같이 조건문으로 h1이 존재하는 경우에만 textContent 속성을 변경하도록 예외 처리를 할 수 있다.
<body>
</body>
<script>
document.addEventListener('DOMContentLoaded', () => {
const h1 = document.querySelector('h1')
if (h1) {
h1.textContent = '안녕하세요'
} else {
console.log('h1 태그를 추출할 수 없습니다.')
}
})
</script>
고급 예외 처리
예외를 조금 더 쉽게 잡을 수 있는 기능으로 try catch finally 구문이 있다. 이와 같은 try catch finally 구문을 사용해서 예외를 처리하는 방법을 고급 예외 처리라고 부른다.
try catch finally 구문의 기본적인 형태는 다음과 같다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (exception) {
// 예외가 발생했을 때 실행할 코드
} finally {
// 무조건 실행할 코드
}
try 구문 안에서 예외를 발생하면 이를 catch 구문에서 처리한다. finally 구문은 필수 사항은 아니며 예외 발생 여부와 상관없이 수행해야 하는 작업이 있을 때 사용한다.
다음 코드는 변수 willExcept 자체가 존재하지 않는데, willExcept의 byeBye() 메소드를 사용한다. willExcept 객체도 없고 byeBye() 메소드도 존재하지 않는다. 따라서 프로그램은 예외를 발생해서 종료된다.
예외 처리를 살펴보기 위한 예제이므로 강제로 예외를 발생시킨 것이다.
<script>
try {
willExcept.byeBye()
} catch (exception) {
}
</script>
try 구문 안에서 예외가 발생하면 더 이상 try 구문을 진행하지 않고 catch 구문을 실행한다.
예외 강제 발생
예외를 강제로 발생시킬 때는 throw 키워드를 사용한다.
다음 코드는 원의 둘레를 구하는 함수를 만든 예시인데, 함수 내부에는 r(반지름)의 값이 음수일 때 '길이는 음수가 될 수 없습니다' 라는 오류를 발생하도록 작성하였다. 오류가 발생했을 때는 catch 구문의 console.log('어떤 문제가 발생했습니다.')를 출력하도록 작성하였다.
const getPerimeter = (r) => {
if (r < 0) {
throw '길이는 음수가 될 수 없습니다.'
}
const pi = 3.14
return 2 * pi * r
}
try {
console.log(getPerimeter(-10))
} catch(e) {
console.log('어떤 문제가 발생했습니다.')
}
console.log('프로그램이 정상적으로 종료되었습니다.')
강제로 예외를 발생시켰을 때 프로그램이 중단되므로 try catch 구문을 사용한 것이다.
throw 키워드를 사용하는 경우는 라이브러리 또는 프레임워크를 만드는 정도이다. 활용할 때는 throw 키워드를 직접 사용 안 하고, 이걸로 발생한 예외를 당하게 된다.[그래서 알아둬야 한다..!]
'Javascript' 카테고리의 다른 글
자바스크립트 - private 속성 (0) | 2022.12.10 |
---|---|
자바스크립트 - Class 도입 (0) | 2022.12.09 |
자바스크립트 - 객체의 기본 속성 지정하기 (0) | 2022.11.29 |
자바스크립트 - 객체의 기본 (1) | 2022.11.12 |
자바스크립트 - 함수 (0) | 2022.11.12 |