try ~ catch, finally

Tae_Tae·2024년 8월 21일

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 문법을 통해 예외를 처리하면 프로그램이 안정적으로 실행되며, 예외 발생 시에도 적절한 대처를 통해 애플리케이션의 신뢰성을 높일 수 있다.

if ~ else 문법과의 차이점


거시적인 차이점은 try~catch는 블럭이고 if~else는 구문이다는 점입니다.
즉, if~else문은 스코프가 벗어나지 않기 때문에 에러처리에는 위험합니다.

따라서 try~catch 문은 if~else 문의 예외 처리와는 달리, 지역 객체들의 소멸 자가 자동으로 호출되므로 메모리 등 리소스 누수의 문제를 조금이나마 해결할 수 있습니다.

구분try~catchif~else
역할예외 처리용조건에 따른 분기 처리용
성능예외 발생 시 성능 저하조건 비교에 최적화, 빠름
예외 처리 능력비정상적 상황 처리 가능, 메모리 누수 문제 해결 가능오류 상황에서 사용하기에는 부적합
자원 관리자원 해제 및 정리 작업 용이자원 해제 작업은 별도로 처리해야 함
사용 시점오류가 발생할 가능성이 있는 코드특정 조건에 따라 프로그램 흐름을 분기 시킬 때

결론


try~catch~finally는 주로 오류를 처리하고, 예외 상황에서도 프로그램을 안전하게 종료하거나 실행하는 데 유리합니다.

반면 if~else는 조건문으로 프로그램 흐름 제어에 적합합니다.

0개의 댓글