에러(Error)와 예외(Exception)
- 에러(Error)
소스코드에 의해서 수습될 수 없는 심각한 오류
- 예외(Exception)
소스코드에 의해서 수습될 수 있는 다소 미약한 오류
예외처리(Exception Handling)이란?
- 코드 실행 중에 발생하는 예외나 오류가 원인으로 전체 시스템의 비정상 동작을 방지하는 기술
- 예외가 주로 발생하는 원인은 아래와 같다.
- 처리 로직이 잘못 작성된 경우
- 산술 연산이 잘못된 경우
- 잘못된 데이터가 입력 된 경우
- 하드웨어 및 소프트웨어의 오작동의 경우
- 시스템 및 네트워크의 과부하 등의 경우
JavaScript의 Error 클래스 상속 관계
Error
├── EvalError
├── RangeError
├── ReferenceError
├── SyntaxError
├── TypeError
└── URIError
try, catch, finally
- 예외처리를 위한 문법
- 각 블록은 아래와 같은 기능을 담당
- try
- 예외가 발생할 가능성이 있는 처리를 작성
- 예외처리를 좀 더 세세하게 처리하고 싶을 경우
catch 블럭을 여러개 작성 가능
- catch
- finally
- 예외 발생 여부와 상관없이 가장 마지막에 항상 실행되는 처리 작성
try {
console.log("코드 실행");
// 예외가 발생할 수 있는 코드
let result = 10 / 0; // NaN 발생 (Division by zero는 오류가 아님)
console.log(result);
} catch (e) {
// 예외 발생 시 처리
console.log("예외 발생: " + e.message);
} finally {
// 예외 발생 여부와 관계없이 마지막에 실행
console.log("코드 실행 완료");
}
강제 예외 발생
throw 키워드와 예외 또는 에러 객체를 인스턴스화 하여 강제 예외 발생
- 예) throw new Error(’에러메세지’);
try {
// 강제 예외 발생
throw new Error('강제 예외 발생');
} catch (e) {
console.log('Error: ' + e.message);
}
예외를 세세하게 처리하기
- 여러 종류의 예외를 처리하고 싶을 때 instanceof 연산자를 사용하여 예외를 구체적으로 처리
try {
// 강제 예외 발생
throw new TypeError('강제 예외 발생');
} catch (e) {
if (e instanceof SyntaxError) {
console.log('Syntax Error: ' + e.message);
} else if (e instanceof TypeError) {
console.log('Type Error: ' + e.message);
} else {
console.log('기타 오류: ' + e.message);
}
}