예외 처리란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비하여 코드를 작성하는 것이며, 예외의 발생으로 인한 프로그램의 갑작스러운 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것을 의미한다.
여기서 예외란 실행 중인 프로그램에서 예기치 못한 상황이 발생하여 더 이상 진행할 수 없는 상황을 말한다.
대부분의 프로그래밍 언어에서는 try-catch 구문을 제공하여 예외를 처리할 수 있는데, 마찬가지로 자바스크립트에서도 예외 처리를 위해 try-catch 구문을 사용할 수 있다.
try {
// 에러가 발생할 가능성이 있는 코드
// 정상이라면 문제없이 실행
// throw 문에 의해 예외가 발생할 수도 있음
} catch (처리하고자 하는 예외 타입, 참조변수 선언) {
// 예외를 처리하기 위해 실행되는 코드
// 지역변수 e를 사용하여 Error 객체 또는 앞에서 던진 값을 참조할 수 있음
} finally {
// 예외 발생 여부와 상관없이 실행되는 코드
// try 블록이 종료되면 실행
}
✓ finally 구문은 필수는 아니며, 보통은 자원이나 DB에 연결한 경우에 파일 닫기, 연결 닫기와 같은 정리 코드를 넣는 데 사용함.
📍 구문 실행 과정
💡 try-catch 블록에서 예외 발생 시, 예외가 발생한 위치 이후에 있는 try 블록의 문장들은 수행되지 않으므로,
try 블록에 포함할 코드의 범위를 잘 선택해야 함!
에러에 대한 정보를 담고 있는 객체(e 매개변수)를 사용할 수 있다.
throw 문은 강제로 예외를 발생시킬 때 사용하는 것으로 ‘예외 던지기’라고도 한다.
예외를 강제로 발생시키는 이유는 객체를 잘못 사용하는 사용자에게 주의를 주기 위함이기도 하고 예외와 관련된 처리를 해달라고 부탁하기 위함이다.
개발자가 예외 객체를 생성하고 키워드 throw를 사용해 예외를 던지면, catch 블록에서 예외를 확인 또는 처리한다.
예외를 던질 때는 new Error('에러 메시지')와 같이 new 연산자를 사용해 예외 객체를 생성하고 catch 블록으로 던진다.
throw 예외를 발생시킬 표현식;
throw "Error2"; // 문자열 값을 가지는 예외가 발생
throw 42; // 42 값을 가진 예외가 발생
throw true; // true 값을 가지는 예외가 발생
💡 throw 문은 자동 세미콜론 삽입에 영향을 받으며 throw 키워드와 표현 식 사이에 줄 종결자는 허용되지 않으므로 주의할 것!
자바스크립트는 인터프리터 언어로 컴파일 타임에 예외를 검사하지 않고, 모든 예외는 런타임에 발생하며 Error 객체를 생성하게 된다. 따라서 자바스크립트에는 자바와 달리 checked exception이 없으며 대신에 TypeError, ReferenceError,
SyntaxError, RangeError 등이 존재한다.
자바에서는 컴파일 타임에 예외를 검사하고, checked exception과 unchecked exception을 구분한다. checked
exception은 반드시 try/catch로 처리해야 하고, unchecked exception은 런타임에 발생하는 오류로 처리하지 않아도 된다.
자바스크립트에서는 예외 타입이 명시적으로 되어 있지 않기 때문에 instanceof 연산자를 사용하여 조건 분기문을 통해 예외 객체의 타입을 확인하고 구분하여 처리한다. 또는 error.name 프로퍼티를 통해서도 다중 예외 처리가가능하다.