오늘은 모던 JavaScript 튜토리얼에서 'try..catch'와 에러 핸들링(https://ko.javascript.info/try-catch)에 대해 공부했다. 작성한 질문은 다음과 같다.
에러가 발생하면 스크립트가 즉시 중단되고(죽고), 콘솔 창에 에러가 출력된다. 이를 방지하고 에러를 잡아 더 합당한 무언가를 하는 문법이 try...catch 문법이다.
try...catch의 동작 알고리즘은 다음과 같다.
- try {...} 안의 코드가 실행된다.
- 에러가 없다면, try 안의 마지막 줄까지 실행되고 catch 블록은 실행하지 않은 채 넘어간다.
- 에러가 있다면, 실행 중인 try 코드가 중단되고 catch 블록으로 실행 흐름이 넘어간다.
try...catch는 런타임에 동기로 동작한다. 런타임에만 동작한다는 뜻은 자바스크립트 엔진의 동작 과정을 먼저 알아야 한다. 자바스크립트 엔진은 코드를 읽고 난 후 코드를 실행한다. 코드를 읽을 때 유효한 코드여야 try...catch가 동작하며 유효한 코드에서 발생하는 에러가 런타임 에러이다. 다음으로 동기로 동작하기 때문에 스케줄 된 코드와 같이 비동기로 동작하는 코드에서 발생한 에러는 잡지 못한다. try...catch가 실행되고 종료된 다음에 비동기에서 실행되어 에러가 발생하면 잡을 방법이 없기 때문이다. 이런 방법을 해결하려면 비동기 함수 내부에 try...catch를 구현해야 한다.
에러 객체에는 다음과 같은 프로퍼티가 존재한다.
- name: 에러 이름
- message: 에러 상세 내용을 담고 있는 메시지
- stack: 현재 호출 스택
어떻게 보면 기능 개발과 동등 혹은 그 이상의 중요성을 갖는 에러 핸들링에 대해 공부하는 시간을 가졌다. 코드 리뷰를 받으며 에러 핸들링이 정말 중요하다는 말씀을 많이 들었는데 JavaScript 에러 핸들링의 기본을 자세하게 알 수 있어서 좋았고 앞으로 에러 핸들링, 더 나아가 에러 핸들링을 테스트하는 과정을 잘 해냈으면 좋겠다.
'TIL' 카테고리의 다른 글
TIL - 20220804 (0) | 2022.08.04 |
---|---|
TIL - 20220803 (0) | 2022.08.03 |
TIL - 20220801 (0) | 2022.08.01 |
TIL - 20220731 (0) | 2022.07.31 |
TIL - 20220730 (0) | 2022.07.30 |