[LearningJS] 예외와 에러 처리
예외와 에러 처리
- 예외 처리(exception handling) : 에러를 컨트롤하는 메커니즘
1. Error 객체
-
내장된 Error 객체를 통해 Error 인스턴스를 만들면서 에러 메시지를 지정한다.
const err = new Error('invalid email');
- 이 인스턴스는 에러와 통신하는 수단이다.
-
에러 메시지는 message 프로퍼티에 있다. (message를 활용해 호출 가능)
2. try / catch
- 에러가 일어나는 문에서 실행 흐름은 에러가 일어나는 즉시 catch 블록으로 이동한다.
3. 에러 일으키키 (throw)
- throw를 호출하면 현재 함수는 즉시 실행을 멈춘다.
- 에러를 일으킬 곳에서
throw new Error('error message');
4. 예외 처리와 호출 스택 (call stack)
- 함수가 중첩 호출될 때 실행 흐름에서 완료되지 않은 함수가 쌓이는 것을 호출 스택이라고 한다.
- 에러는 캐치될 때까지 호출 스택을 따라 올라간다.
- 에러는 호출 스택 어디에서든 캐치할 수 있다.
- 에러를 캐치하지 않으면 자바스크립트 해석기(Javascript Interpreter)는 프로그램을 멈추는데, 이를 처리하지 않은 예외(unhandled exception), 캐치하지 않은 예외(uncaught exception)라 한다.
- 대부분의 자바스크립트 환경에서 Error 인스턴스에는 스택을 문자열로 표현한 stack 프로퍼티가 있다.
- console 상에서 @ 기호가 있는 행은 스택을 추적한다.
5. try…catch…finally
- try 블록의 코드가 HTTP 연결이나 파일 같은 일종의 ‘자원’을 처리할 때, 프로그램에서 이 자원을 계속 가지고 있을 수는 없으므로 에러가 있든 없든 어느 시점에서는 이 자원을 해제해야 한다.
- try 블록이나 catch 블록은 조건적으로 실행되기 때문에 불완전해서 자원을 해제하기에 부적합하다.
- 무조건 호출 / 실행되는 finally 블록에서 자원을 해제하는 것이 가장 올바른 방법이다.
댓글남기기