예외 (exception) try catch문

jake·2021년 8월 5일
0

JavaScript문법

목록 보기
10/21
post-thumbnail
  • thorw new Error는 에러 객체 instance를 만들어서 사용하게 되어있다.
  • thorw가 발생했는데 어디서도 받아주지 않으면 프로그램 종료된다.
  • 그래서 thorw를 받는 try catch finally를 쓴다.
  • try로 일단 함수를 시도해본다. 시도한 함수에서 예외가 있다면 catch 블록이 실행된다. (catch가 받는 인자에 throw가 던져준 값을 넣어준다고 생각하면된다. 보통 error의 e로 작성) 그리고 finally로 실행된다.
  • 예외가 일어나지 않았을시에는 try하고 finally가 실행되고 바깥으로 빠져나간다.
  • finally 구문은 예외가 나던 나지않던 실행된다고 보면된다.
  • finally는 예외가 나더라도 반드시 실행되야 하는 코드가 있을 때 필요하다.
    예를 들어 아래와 같이 쓴경우 doException을 실행하고 예외가 나지 않는다면 다음문장인consol.log('a')바로 실행되겠지만 예외 발생시 바로 catch로 가기 때문에 실행이 안되기때문이다.
    function main() {
        try {
            doException('do');
            consol.log('a') /// 예외가 날경우 실행 되지않음
        } catch(e) {
            console.log(e);
        } finally {
            consol.log('a') // 여기에 써줘야함
        }
  • noException()이라는 함수를 만들고 return true; 값으로 주고 실행한다면 catch 로 넘어가지 않고 바로 finally를 실행한다.
    function main() {
        try {
            noExcepiton();
        } catch(e) {
            console.log(e);
        } finally {
            console.log('done');
        }
    } 
  • try catch의 특징은 예외가 함수 호출의 뎁스에 상관없이 바깥쪽으로 예외를 던지면 그 바깥쪽에 어떤 함수든 catch로 잡기만 하면된다. 즉 먼저 잡는 catch가 임자. catch로 잡고 다시 전파시키지 않는다.
    function doException() {
        throw new Error('와우! 오류야!');
    }
    function noExcepiton() {
        return true;
    }
    function callException(type) {
        if (type === 'do') {
            doException();
        } else {
            noExcepiton();
        }
    }
    function main() {
        try {
            callException('do'); // if문가서 doException(); 실행 후 에러 던져짐 
        } catch(e) {
            console.log(e); // catch가 여기서 오류를 잡음
        } finally {
            console.log('done');
        }
    } 
profile
열린 마음의 개발자가 되려합니다

0개의 댓글