FE/리뷰
[모던 자바스크립트 딥다이브] 47장 에러 처리
따봉치치
2024. 6. 9. 17:52
728x90
에러 처리의 필요성
- 발생한 에러에 대해 대처하지 않고 방치하면 프로그램은 강제 종료됨
- try - catch 문을 사용해 발생한 에러를 적절하게 대응하면 프로그램은 강제 종료되지 않고 계속해서 코드를 실행시킬 수 있음
- 예외적인 상황에 적절하게 대처하지 않으면 에러로 이어질 가능성이 큼
- 에러나 예외적인 상황은 너무나 다양하기 때문에 아무런 조치 없이 프로그램이 강제 종료된다면 원인을 파악하여 대응하기 어려움
try - catch - finally 문
try {
// 실행할 코드 (에러가 발생할 가능성이 있는 코드)
} catch (err) {
// try 코드 블록에서 에러가 발생하면 이 블록의 코드가 실행됨
// err 에는 try 코드 블록에서 발생한 Error 객체가 전달됨
} finally {
// 에러 발생과 상관없이 반드시 한 번 실행됨
}
Error 객체
- Error 생성자 함수는 에러 객체를 생성함
- 에러 객체는 message 프로퍼티와 stack 프로퍼티를 갖음
- message : Error 생성자 함수에 인수로 전달한 에러 메시지
- stack : 에러를 발생시킨 콜 스택의 호출 정보를 나타내는 문자열, 디버깅 목적
생성자 함수 | 인스턴스 |
Error | 일반적 에러 객체 |
SyntaxError | 자바스크립트 문법에 맞지 않는 문을 해석할 때 발생하는 에러 객체 |
ReferenceError | 참조할 수 없는 식별자를 참조했을 때 발생하는 에러 객체 |
TypeError | 피연산자 또는 인수의 데이터 타입이 유효하지 않을 때 발생하는 에러 객체 |
RangeError | 숫자값의 허용 범위를 벗어났을 때 발생하는 에러 객체 |
URIError | encodeURI 또는 decondeURI 함수에 부적절한 인수를 전달했을 때 발생하는 에러 객체 |
EvalError | eval 함수에서 발생하는 에러 객체 |
throw 문
- throw 문의 표현식은 어떤 값이라도 상관없지만 일반적으로 에러 객체를 지정함
- 에러를 던지면 catch 문의 에러 변수가 생성되고 던져진 에러 객체가 할당되며 catch 코드 블록이 실행되기 시작함
에러의 전파
- throw 된 에러를 캐치하지 않으면 호출자 방향으로 전파됨
- 이때 throw된 에러를 캐치하여 적절히 대응하면 프로그램을 강제 종료시키지 않고 코드의 실행 흐름을 복구할 수 있지만 캐치하지 않으면 프로그램은 강제 종료됨
728x90