자바스크립트에서 예외가 발생했을 때 try-catch
로 예외를 처리하는 방법을 소개합니다. 또한 어떤 조건에서 예외를 발생시키는 방법을 알아보겠습니다.
1. 예외 발생으로 프로그램이 종료되는 코드
존재하지 않는 함수 nonExistentFunction()
를 호출하는 프로그램을 실행하면 아래와 같이 에러를 발생시키면서 프로그램이 종료됩니다.
예외가 발생했을 때, 프로그램이 종료되면 문제가 발견되어 버그를 수정할 수 있습니다. 하지만 프로그램이 종료되면 안되는 중요한 프로그램이라면, 예외를 처리(Error handling)하여 프로그램이 종료되지 않도록 만들고 다음 동작이 수행되도록 만들어야합니다.
nonExistentFunction();
console.log("Do other things")
Output:
Error:
/home/js/js_project/examples/node_87afd4b88f3c0.tmp:10
nonExistentFunction();
^
ReferenceError: nonExistentFunction is not defined
at Object.<anonymous> (/home/js/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/js/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/js/js_project/examples/node_51b926f893182.tmp:4
throw new Error("num < 0");
^
Error: num < 0
at Object.<anonymous> (/home/js/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 - 현재 날짜/시간을 항상 한국 기준으로 가져오기
- Javascript - 문자열 사이에 문자 넣기
- Javascript - 버튼 활성화/비활성화 시키는 방법
- Javascript - 버튼 이름 변경하기
- Javascript - div 안의 내용 가져오기, 변경, 추가, 삭제
- Javascript - <ol>, <ul>에 <li> 동적 추가, 삭제
- Javascript - div 생성, 추가, 삭제 방법
- Javascript - 테이블 행(tr) 숨기기, 보이기
- Javascript - div에 링크 거는 방법
- Javascript - 자식 요소(element) 개수 확인
- Javascript - 요소(element) 복사, 붙여넣기
- Javascript - div에 클릭 이벤트(onclick) 설정 방법
- Javascript - 체크박스 선택/해제 시, 텍스트박스 활성화/비활성화
- Javascript - input 숫자만 입력받도록 설정
- Javascript - 자식 노드 모두 제거
- Javascript - 체크박스 선택, 해제 방법
- Javascript - input text 값 가져오기
- JavaScript - 문자열을 배열(Array)로 변환
- JavaScript - 특정 문자열의 포함 여부 확인 (includes, 정규표현식)
- JavaScript - 문자열 비교 방법, 5가지
- JavaScript - 문자열 바꾸기(replace, 정규식 치환)
- JavaScript - 배열 전체 출력 (for, forEach, for in, for of)
- JavaScript - 한번만 실행되는 함수 (once: true)
- JavaScript - 선택된 checkbox 값 가져오기
- JavaScript - element(버튼, div) 보이기 숨기기
- JavaScript - 숫자를 배열로 변경하는 방법
- JavaScript - div, 태그 안의 내용 가져오기
- JavaScript - 부모, 형제, 자식 element 찾기
- JavaScript - 클래스 이름으로 element 찾는 방법
- JavaScript Array find() 함수
- JavaScript Array splice() 함수
- JavaScript의 contains() 함수
- JavaScript sort() 함수, 예제 소개
- JavaScript - Set 생성 및 초기화
- JavaScript Set add() 함수