본문 바로가기
JavaScript 200제

예외처리 하기

by 촤리 2022. 7. 27.

예외 처리 시 에러 종류는 두 가지다

  • 예상치 못한 에러 : 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문은 에러를 발견하되 끝까지 코드를 실행시킨다.

댓글