자바스크립트에서 예외 처리는 코드 실행 중 발생할 수 있는 오류를 관리하고, 애플리케이션이 비정상적으로 종료되지 않도록 하는 중요한 기법입니다. 예외 처리는 try
, catch
, finally
블록을 사용하여 구현됩니다.
기본 구조
try
블록: 실행할 코드를 포함합니다. 이 블록에서 예외가 발생하면 그 즉시 실행이 중단되고, 제어가catch
블록으로 이동합니다.catch
블록: 예외가 발생했을 때 실행할 코드를 포함합니다.catch
블록은try
블록에서 발생한 예외 객체를 매개변수로 받습니다.finally
블록: 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함합니다.finally
블록은 선택적으로 사용할 수 있습니다.
try {
// 실행할 코드
} catch (error) {
// 예외가 발생했을 때 처리할 코드
} finally {
// 항상 실행되는 코드
}
예제
try {
let result = riskyOperation(); // 예외가 발생할 수 있는 함수 호출
console.log('Operation successful:', result);
} catch (error) {
console.error('An error occurred:', error.message);
} finally {
console.log('Operation complete.');
}
주요 개념
예외 발생시키기 (throw
)
예외를 명시적으로 발생시키려면 throw
문을 사용합니다. throw
문 뒤에는 예외 객체나 값을 지정할 수 있습니다. 예외 객체는 일반적으로 Error
객체를 사용합니다.
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero');
}
return a / b;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error('An error occurred:', error.message);
}
사용자 정의 예외
필요에 따라 사용자 정의 예외를 만들 수도 있습니다. 이를 위해 Error
클래스를 확장합니다.
class CustomError extends Error {
constructor(message) {
super(message);
this.name = 'CustomError';
}
}
try {
throw new CustomError('This is a custom error');
} catch (error) {
console.error(error.name + ': ' + error.message);
}
네스티드 예외 처리
중첩된 예외 처리 블록을 사용하여 더 세밀하게 예외를 처리할 수 있습니다.
try {
try {
riskyOperation();
} catch (error) {
console.error('Inner catch:', error.message);
throw new Error('New error in inner catch');
}
} catch (error) {
console.error('Outer catch:', error.message);
}
예외 객체
예외 객체는 발생한 오류에 대한 정보를 포함합니다. Error
객체의 주요 속성은 다음과 같습니다.
name
: 오류의 이름 (기본값은Error
)message
: 오류 메시지stack
: 스택 추적 정보 (디버깅에 유용)
try {
throw new Error('Something went wrong');
} catch (error) {
console.log(error.name); // "Error"
console.log(error.message); // "Something went wrong"
console.log(error.stack); // 스택 추적 정보
}
결론
자바스크립트에서 예외 처리는 오류가 발생해도 프로그램이 비정상적으로 종료되지 않도록 하며, 오류를 우아하게 처리할 수 있게 해줍니다. try
, catch
, finally
블록을 사용하여 예외를 처리하고, throw
문을 사용하여 예외를 발생시킬 수 있습니다. 사용자 정의 예외와 네스티드 예외 처리는 더 정교한 오류 처리를 가능하게 합니다.