본문 바로가기

카테고리 없음

CH8. 예외 처리- 구문 오류와 예외

08-1 구문 오류와 예외

1. 오류의 종류

괄호 개수를 잘못 입력하는 등의 오류로 코드가 실행조차 되지 않는 오류를 구문 오류라고 한다.

프로그래밍 언어의 오류에는 크게 두 가지 종류가 있다.

  1. 프로그램 실행 전에 발생하는 오류 (구문 오류)
  2. 프로그램 실행 중에 발생하는 오류 (예외 or 런타임 오류)

2. 구문 오류

구문 오류는 괄호의 짝을 맞추지 않았다든지 문자열을 열었는데 닫지 않았을 때 발생하는 오류이다.

구문 오류는 웹 브라우저가 코드를 분석조차 못하므로 실행되지 않는다.

 

두 번째 줄에서 'Uncaught SyntaxError'가 발생하였다. 만약 프로그램이 실행된다면 첫 번째 줄은 출력되었겠지만

구문 오류로 프로그램이 처음부터 실행되지 않는 것을 알 수 있다.

 

3. 예외

예외 또는 런타임 오류는 실행 중에 발생하는 오류를 의미한다. 

 

'프로그램 시작!' 문자열은 성공적으로 출력되었고 log를 rog로 잘못 입력하여 'Uncaght SyntaxError'가

발생하였다. 즉 예외는 구문 오류와 달리 프로그램이 실행은 되지만 실행 중 정의되지 않은 식별자나 메소드 사용과

같이 발생하는 오류를 의미한다. 자바스크립트에서는 SyntaxError 이외의 모든 오류는 예외로 분류된다.

 

4. 기본 예외 처리

조건문을 사용해서 예외가 발생하지 않게 만드는 것을 기본 예외 처리라고 한다.

 

h1이 없는 상황인데 querySelector를 하니 TypeError 런타임 오류가 발생하였다. 이를 조건문으로 해결해보자.

 

h1이 존재할 때만 innerHTML을 실행하도록 조건문을 사용하였고 결과적으로 'h1이 없습니다!' 문자열이 console창에

출력되었다.

 

5. 고급 예외 처리

try catch finally 구문을 사용해서 예외를 처리하는 방법을 고급 예외 처리라고 부른다.

try{
    // 예외가 발생할 가능성이 있는 코드
} catch (exception) {
    // 예외가 발생했을 때 실행할 코드
} finally {
    // 무조건 실행할 코드
}

 

try 구문에서 h1 태그를 찾고 innerHTML을 설정할 때 예외가 발생하였으므로 catch문으로 넘어가 'catch 구문입니다!'를 출력하였다. 또한 예외의 발생 여부를 떠나 finally 구문이 부조건 실행되어 'finally 구문입니다!' 도 출력되었다.

 

6. 좀 더 알아보기

1) finally 구문을 사용하는 이유

위와 같이 catch 문에서 return을 한 경우 그 아래의 코드는 실행하지 않고 함수를 종료한다.

 

반면에 finally 구문을 사용한 경우 catch 구문에서 return을 만났지만 finally 구문을 실행한다.

try catch 구문에서 return, break, continue를 만날 때 결과가 달라지므로 finally 구문을 효과적으로 사용할 수 있다.