예외 처리 시 에러 종류는 두 가지다
- 예상치 못한 에러 : try-catch-finally문
- 개발자가 의도한 에러 : throw문, try-catch-finally문
* 개발자가 의도한 에러란?
코드에서 잘못될 가능성을 예상하고 발생시키는 에러
throw문 예제 ⬇️
function checkNumber(val) {
// 숫자형 값 여부를 확인하는 함수를 선언한다.
if (typeof val !== 'number') throw '유효하지 않은 값입니다.';
// typeof val을 통해 숫자형 값이 아닌 경우, throw 문을 통해 함수 블록을 빠져나간다.
console.log('숫자형 값으로 확인되었습니다.')
// 숫자형이 확인되면 출력되는 문장이다
}
checkNumber(100);
// 슷자형 값 100을 넣으면 '숫자형 값으로 확인되었습니다.'가 출력된다.
checkNumber('Wrong type');
// 문자형 값을 넣으면 typeof val 결과값은 string으로 반화해서 '유효하지 않은 값입니다.' 가 출력된다.
console.log('완료');
// 11번 라인에서 에러가 발생하여 코드 시행이 중단되고 마지막 13라인은 실행되지 않는다.
결과 ⬇️
if (typeof val !== 'number') throw '유효하지 않은 값입니다.';
^
유효하지 않은 값입니다.
throw문은 고의로 에러를 발생시켜 예외 상황을 알리는 역할을 한다.
rhrow문이 실행되면 실행되고 있는 코드 블록을 빠져나간다.
try-catch-finally문 예제 ⬇️
function checkNumber(val) {
if (typeof val !== 'number') throw '유효하지 않은 값입니다.';
console.log('숫자형 값으로 확인되었습니다.');
}
try{
checkNumber(100);
checkNumber('Wrong type');
// 첫 번째 예제와 동일하게 8라인에서 에러가 발생한다. 그러나 try 문의 블록안에 있기 떄문에
// 발생된 에러 정보는 catch블록으로 전달된다.
} catch (e) {
console.log(`에러가 발생했습니다 >>> ${e}`);
// 변수 e에 에러 정보가 전달된다. 여기에는 2라인에 throw 문의 문자열'유효하지 않은 값입니다.'가
// 대입되어있다. 콘솔로 에러 정보를 출력한다.
} finally {
console.log('완료');
// finally블록은 코드가 모두 처리되 난 뒤 마지막에 실행된다. 에러 여부와 상관없이 항상 실행되기 떄문에
// '완료' 문자열이 출력된다.
}
결과 ⬇️
숫자형 값으로 확인되었습니다.
에러가 발생했습니다 >>> 유효하지 않은 값입니다.
완료
try-catch-finally 문은 try 블록 안에서 발생된 에러를 잡아내고, catch블록으로 제어권을 넘긴다.
try 블록에서 발생된 에러 정보는 catch 문의 변수로 전달되기 때문에 개발자는 프로그램 종료 없이 어떤 에러가 발생했는지 확인 할 수 있다. finally 블록은 에러 발생 여부와 상관없이 실행되는 블록이다 예를 들어 이를 활용하면 파일 읽기쓰기를 할 떄 에러가 발생되더라고
항상 파일 close구문을 실행할 수 있다.
✅ 정리
- throw문은 에러 발견 즉시 코드를 종료시킨다
- try-catch-finally문은 에러를 발견하되 끝까지 코드를 실행시킨다.
'JavaScript 200제' 카테고리의 다른 글
함수 기본 매개변수 처리하기 (0) | 2022.07.27 |
---|---|
arguments 객체 이해하기 (0) | 2022.07.27 |
심볼형 이해하기 (0) | 2022.07.27 |
ES6의 향상된 객체 문법 - 비구조화 할당 (0) | 2022.07.27 |
ES6의 향상된 객체 문법 - 속성 계산명 (0) | 2022.07.27 |
댓글