[예외처리] 던질게 받아라!

2022. 12. 14. 14:31기본기가 부족하다면/자바스크립트

사전적 정의 : 일반 규칙이나 통례에서 벗어남

 

개발적 측면에서는 어떤 언어든 라이브러리나 프레임워크가 됐든 정해놓은 규칙에 어긋나게 사용하려고 하면 발생하는 것을 예외가 발생했다고 하고, 이 때 '그냥 에러가 발생하게 둘 수 없지~' 하면서 '예외가 발생하면 이렇게 행동할 것!' 이라고 규정해두는 것이 바로 예외처리이다.

 

MDN에서는 아래와 같이 설명하고 있다.

throw 문을 사용하면 예외를 던질 수 있고, 던진 예외는 try...catch 문으로 처리할 수 있습니다.

 

Throw (던질 게 받아라~)

throw 'Error2'; // String
throw 42; // Number
throw true; // Boolean
throw {
  toString: function () {
    return '저는 객체예요';
  },
};
throw new Error("에러났는데요");
  • 대게 throw 를 작성할 때는 단순 텍스트가 아닌 Error 객체를 활용한다.
  • Error 객체에는 실행되고 있는 위치에서의 callStack 정보가 담겨있기 때문이다.

 

try...catch (잡아서 처리해라~)

function f() {
  try {
    console.log(0);
    throw new Error("에러발생");
  } catch (e) {
    console.log(1);
    return true; // finally 블록의 실행이 끝날 때까지 중단됨
    console.log(2); // 접근 불가
    
    // Error 객체 사용
    console.log(e.name); // 'Error' 기록
    console.log(e.message); // '메시지' 또는 JavaScript 오류 메시지 기록
  } finally {
    console.log(3);
    return false; // 앞선 return보다 우선함
    console.log(4); // 접근 불가
  }
  // return false가 실행됨
  console.log(5); // 접근 불가
}
console.log(f()); // 0, 1, 3, false
  • try 블록 내에서 예외가 발생하지 않으면 catch 블록은 실행되지 않으며, try 블록의 명령문 중 하나라도 예외가 발생하면, 실행 제어권은 catch 블록으로 넘어간다.
  • 개발자라면 catch에서 실행할 구문이 중요하다. 에러의 중요도에 따라 중지여부, 화면 표시여부 등을 결정해야 하기 때문에 예외처리는 많은 검토를 거쳐 발생시켜야 한다.
  • finally 는 try...catch 문 다음 실행되는 명령들보다 먼저 이어서 실행하게되는 명령문을 담는다. 만약 finally 에서 반환하는 값이 있다면 그값이 전체 try...catch...finally 문의 반환값이 된다. (try와 catch블록에서 반환값은 무시된다.)
  • 이 때, catch 문에서 반환하는 값이나 throw 가 있다면 finally와 순서가 혼돈될 수 있기때문에, 유의하며 사용해야한다.
반응형

'기본기가 부족하다면 > 자바스크립트' 카테고리의 다른 글

원시값(Primitive Type)  (0) 2022.12.15
[예외처리] Promise, async & await  (0) 2022.12.14
가비지 컬렉터  (0) 2022.12.08
메모리 관리  (0) 2022.12.08
실행 컨텍스트 (Execution Context)  (1) 2022.12.08