[예외처리] 던질게 받아라!
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 |