자바스크립트에서 예외가 발생했을 때 try-catch
로 예외를 처리하는 방법을 소개합니다. 또한 어떤 조건에서 예외를 발생시키는 방법을 알아보겠습니다.
1. 예외 발생으로 프로그램이 종료되는 코드
존재하지 않는 함수 nonExistentFunction()
를 호출하는 프로그램을 실행하면 아래와 같이 에러를 발생시키면서 프로그램이 종료됩니다.
예외가 발생했을 때, 프로그램이 종료되면 문제가 발견되어 버그를 수정할 수 있습니다. 하지만 프로그램이 종료되면 안되는 중요한 프로그램이라면, 예외를 처리(Error handling)하여 프로그램이 종료되지 않도록 만들고 다음 동작이 수행되도록 만들어야합니다.
nonExistentFunction();
console.log("Do other things")
Output:
Error:
/home/mjs/js_project/examples/node_87afd4b88f3c0.tmp:10
nonExistentFunction();
^
ReferenceError: nonExistentFunction is not defined
at Object.<anonymous> (/home/mjs/js_project/examples/node_87afd4b88f3c0.tmp:10:1)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
2. try-catch로 예외 처리(Error/Exception handling)
다음과 같이 try-catch
구문을 사용하면 에러가 발생되었을 때 catch
에서 에러를 처리할 수 있으며 프로그램을 종료시키지 않을 수 있습니다.
아래 예제는 catch
에서 에러 내용을 출력하고 다음 동작을 수행합니다. 결과를 보시면 Do other things
라는 로그가 출력된 것을 확인할 수 있습니다.
try {
nonExistentFunction();
} catch (error) {
console.error(error);
}
console.log("Do other things")
Output:
Error:
ReferenceError: nonExistentFunction is not defined
at Object.<anonymous> (/home/mjs/js_project/examples/node_6dee02da41b96.tmp:2:3)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
Do other things
3. 직접 에러를 발생시키는 방법
다음과 같이 throw new Error()
로 에러를 발생시킬 수 있습니다.
let num = -1;
if (num < 0) {
throw new Error("num < 0");
}
프로그램을 실행하면 다음과 같이 에러가 발생하면서 종료됩니다.
Error:
/home/mjs/js_project/examples/node_51b926f893182.tmp:4
throw new Error("num < 0");
^
Error: num < 0
at Object.<anonymous> (/home/mjs/js_project/examples/node_51b926f893182.tmp:4:9)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
위의 코드는 아래와 같이 try-catch
를 사용하여 num이 음수일 때 num에 10을 할당하도록 예외처리할 수 있습니다.
이 경우, 에러 내용은 출력할 필요가 없기 때문에 출력하지 않았습니다.
let num = -1;
try {
if (num < 0) {
throw new Error("num < 0");
}
} catch (error) {
num = 10;
}
console.log('num: ' + num);
Output:
num: 10
4. try-catch-finally로 예외 처리
try-catch-finally
에서 finally는 try 구문을 빠져나올 때 마지막으로 수행되어야하는 작업을 처리합니다.
에러가 발생하거나 안하거나 finally의 코드는 모두 수행됩니다.
아래 예제를 보시면, num이 양수이기 때문에 에러가 발생하지 않습니다. 하지만 finally 안의 코드는 try 구문이 종료될 때 항상 수행됩니다.
function validateNum(num) {
if (num < 0) {
throw new Error("num < 0");
}
}
let num = 10;
try {
validateNum(num);
} catch (error) {
console.log("Error occurred");
} finally {
console.log("num: " + num);
}
Output:
num: 10
아래 예제와 같이, 만약 에러가 발생되는 경우 catch의 코드가 수행되고, 그리고 마지막으로 finally의 코드가 수행됩니다.
function validateNum(num) {
if (num < 0) {
throw new Error("num < 0");
}
}
let num = -1;
try {
validateNum(num);
} catch (error) {
console.log("Error occurred");
} finally {
console.log("num: " + num);
}
Output:
Error occurred
num: -1
5. try-finally
예외 처리가 필요없는 경우 catch가 빠진 try...finally
구문을 사용할 수 있습니다. 물론 에러가 발생하면 프로그램이 종료됩니다.
let num = 10;
try {
num = 20;
} finally {
console.log("num: " + num);
}
Output:
num: 20
References
Related Posts
- JavaScript - 빈 문자열 확인, 2가지 방법
- JavaScript - 날짜/시간 비교, 3가지 방법
- JavaScript - 랜덤 문자열 생성, 2가지 방법
- JavaScript - 마지막 문자 제거, 4가지 방법
- JavaScript - 문자열 공백 제거, 3가지 방법
- JavaScript - 배열을 문자열로 변환, 3가지 방법
- JavaScript - 여러 줄 문자열, 3가지 방법
- JavaScript - 객체를 문자열로 변환, 2가지 방법
- JavaScript - 문자열의 첫번째 문자 가져오기, 4가지 방법
- JavaScript - 문자열의 마지막 문자 가져오기, 4가지 방법
- JavaScript - 배열 맨 앞에 요소 추가/제거, 2가지 방법
- JavaScript - 2차원 배열을 1차원 배열로 변환, 2가지 방법
- JavaScript - 현재 시간 Timestamp 가져오기
- JavaScript - 대소문자 변환 (LowerCase, UpperCase)
- JavaScript - 문자열 바꾸기(replace, 정규식 치환)
- JavaScript - setTimeout()으로 함수 실행 지연
- JavaScript - 'try...catch'로 예외 처리 방법
- JavaScript - 문자열을 날짜(Date)로 변환하는 방법
- JavaScript - 배열에서 중복 제거, 4가지 방법
- JavaScript - Float을 Integer로 변환, 3가지 방법
- JavaScript - 문자열 비교 방법, 5가지
- JavaScript - 문자열에서 문자 또는 단어 추출, 4가지 방법
- JavaScript - 문자열 뒤집기, 거꾸로 출력
- JavaScript - 배열의 마지막 요소 가져오기
- JavaScript - 배열에서 최대, 최소 값 찾기
- JavaScript - 소수점 자리수 올림, 내림, 반올림, 제거 방법
- JavaScript - 숫자 3자리마다 콤마(,) 넣는 방법
- JavaScript - 타입 확인 방법 (typeof)
- JavaScript - 빈 배열인지 확인 (Empty Array)
- JavaScript - 배열 길이 확인, 길이 변경 (Array.length)
- JavaScript - 문자열에서 숫자만 추출
- JavaScript - 특정 문자열의 포함 여부 확인 (includes, 정규표현식)
- JavaScript - 배열 합치기 (concat, spread, push)
- JavaScript - 문자열에서 특정 문자 위치 찾기 (indexOf, lastIndexOf)
- JavaScript - 현재 날짜, 시간 가져오기
- JavaScript - 배열 정렬 방법 (오름차순, 내림차순)