JavaScript는 코드 실행 중 발생할 수 있는 오류를 Exception으로 처리할 수 있는 메커니즘을 제공하는데
try, catch, finally 문법은 이러한 예외를 처리하여 코드의 안정성을 유지하는 데 사용된다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (error) {
// 예외 처리 코드
} finally {
// 항상 실행되는 코드
}
각 코드를 세분화 해보면
try 블록try 블록은 실행할 코드를 포함하는 영역으로, 예외가 발생할 가능성이 있는 코드를 이 블록 안에 작성한다.
이 블록 내에서 예외가 발생하면, 해당 예외는 즉시 catch 블록으로 전달된다.
try {
// 예외가 발생할 가능성이 있는 코드
let result = riskyOperation();
console.log(result);
}
catch 블록catch 블록은 try 블록에서 예외가 발생했을 때 실행된다.
이 블록에서는 예외 정보를 기반으로 적절한 처리를 수행하며, 프로그램이 비정상적으로 종료되지 않도록 방지한다.
catch (error) {
// 예외 처리 코드
console.error("An error occurred:", error.message);
}
catch 블록의 매개변수로 전달된 error 객체는 예외에 대한 세부 정보를 포함하며, 이를 통해 오류의 원인과 종류를 파악할 수 있다.
finally 블록finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 영역이다.
이 블록은 주로 자원 해제나 정리 작업을 수행하는 데 사용되는데
예를 들어, 파일이나 데이터베이스 연결을 닫는 작업을 여기에서 처리할 수 있다.
finally {
// 항상 실행되는 코드
console.log("Cleanup actions, such as closing files or connections.");
}
예외 처리는 애플리케이션의 안정성을 보장하는 중요한 요소이다.
프로그램 실행 중 발생할 수 있는 예기치 않은 오류를 적절히 처리하지 않으면, 애플리케이션이 비정상적으로 종료되거나 사용자에게 불편을 초래할 수 있는데 try, catch, finally 문법을 통해 예외를 처리하면 프로그램이 안정적으로 실행되며, 예외 발생 시에도 적절한 대처를 통해 애플리케이션의 신뢰성을 높일 수 있다.
거시적인 차이점은 try~catch는 블럭이고 if~else는 구문이다는 점입니다.
즉, if~else문은 스코프가 벗어나지 않기 때문에 에러처리에는 위험합니다.
따라서 try~catch 문은 if~else 문의 예외 처리와는 달리, 지역 객체들의 소멸 자가 자동으로 호출되므로 메모리 등 리소스 누수의 문제를 조금이나마 해결할 수 있습니다.
| 구분 | try~catch | if~else |
|---|---|---|
| 역할 | 예외 처리용 | 조건에 따른 분기 처리용 |
| 성능 | 예외 발생 시 성능 저하 | 조건 비교에 최적화, 빠름 |
| 예외 처리 능력 | 비정상적 상황 처리 가능, 메모리 누수 문제 해결 가능 | 오류 상황에서 사용하기에는 부적합 |
| 자원 관리 | 자원 해제 및 정리 작업 용이 | 자원 해제 작업은 별도로 처리해야 함 |
| 사용 시점 | 오류가 발생할 가능성이 있는 코드 | 특정 조건에 따라 프로그램 흐름을 분기 시킬 때 |
try~catch~finally는 주로 오류를 처리하고, 예외 상황에서도 프로그램을 안전하게 종료하거나 실행하는 데 유리합니다.
반면 if~else는 조건문으로 프로그램 흐름 제어에 적합합니다.