Javascript try_catch 문

2023. 1. 22. 20:14JavaScript/Modern Javascript

목차
1. 에러가 발생하면 생기는 일
2. try_catch 문
3. 에러 객체
4. 에러 던지기(throw)
5. try_catch_finally

1. 에러가 발생하면 생기는 일

 

 

누구나 코드를 짜고나서 에러를 발생시킬 수 있다.

 

에러가 발생하면, 스크립트나 서버가 죽고(멈추고) 콘솔창에 에러가 발생했다고, 출력이 된다.

 

NodeJs의 에러창

 

서버가 멈춘다는 것은 상당히 치명적이므로 그런일은 발생해서는 안된다.

 

try catch문을 이용하면 에러가 발생하더라도 스크립트가 죽지않고, 에러 또한 어디서 났는지 알 수가 있다.

 

 

 


2. try_catch 문

 

 

try_catch 문은 try부분과 catch부분으로 구성되어있다.

 

 

문법(Syntax)

 

try { 실행 코드 블럭 }
catch(error) { 에러 발생 }

 

try_catch 알고리즘은 간단하다. 에러가 있는 경우와 없는 경우로 나뉘어 동작한다.

 

  1. try 부분의 코드가 실행된다.
  2. 에러가 없는 경우 try부분만 실행하고, catch 부분은 보지 않고 넘어간다.
  3. 만약 에러가 있다면, 남은 코드를 실행하지않고 catch부분으로 넘어가 코드를 진행한다.
    • catch 부분에서는 error 객체를 받을 수 있다.

 

 

 

try 블록 안에서 에러가 발생해도 catch에서 에러를 처리하기 때문에 스크립트가 죽지 않는다.

 

 

※ try catch 문의 특징

 

● try_catch는 실행 중인 코드에서 작동한다. 

 

try catch 문은 실행중인 에러를 잡아내는데 용이하다.

실행중에 발생하는 에러는 런타임(runtime error)라하고 예외(exception)라고도 한다.

 

반면에 코드를 읽을 때 발생하는 에러(문법적으로 틀리는 등등)는 잡을 수 없다. 이런 오류는 parse-time 에러라고 한다.

 

 

 try_catch는 동기적으로 동작한다.

 

setTimeout, setInterval과 같이 스케줄된 코드에서 발생한 오류는 try catch 로 잡을 수가 없다.

 

setTImeout과 같은 코드는 백그라운드로 넘어가 나중에 실행되는데,

이는 try catch문을 지나간 후에 실행이 되기 때문이다.

 

 

 에러에 대한 정보가 필요없다면, catch 문에 error를 생략할 수도 있다.

 

try{
// 실행되는 코드
} catch { ... }

 


3. 에러 객체

 

 

에러가 발생하면 에러의 내용이 담긴 객체를 생성한다.

 

내장 에러 전체와 어레 객체는 두 가지 주요 프로퍼티를 가진다.

 

 

error.name

 

에러의 이름을 나타낸다
정의되지않은 변수로 인한 에러라면 "ReferenceError"가 이름이 된다

 

 

error.message

 

에러 상세 내용을 담고 있는 문자 메시지

 

 

 


4. 에러 던지기(throw)

 

 

throw 연산자를 이용하면 error를 생성하고 던질 수 있다.

던져진 error는 catch 블록에서 받아낸다.

 

에러 던지기

 

문법(Syntax)

 

throw <에러 객체>

 

숫자, 문자열 같은 원시형 자료를 포함한 어던 것이든 에러 객체로 사용이 가능하지만,

내장 에러와의 호환을 위해서 error.name이나 error.messag 프로퍼티를 넣어주는 것을 권장한다.

 

자바스크립트는 Error, SyntaxError, ReferenceError, TypeError 등의 표준 에러 객체 생성자를 지원한다.

 

표준 에러 객체 생성자

new Error(message)
new SyntaxError(message)
new ReferenceError(message)

 

내장 에러 객체의 프로퍼티 error.name은 생성자 이름과 같은 값을 가지고, error.message는 생성자의 인수를 가져온다.

 

 

예시(Sample)

 

let error = new Error("에러가 발생했다.");

console.log(error.name); // Error
console.log(error.message); // 에러가 발생했다.

 

 

에러 다시 던지기

 

에러는 예외처리등으로 발생한다. 하지만, 내가 예상하지 못한 에러가 발생했을 때는 어떻게 처리해야할까?

 

결론부텀 말하자면 내가 알지 못하는 에러가 발생했을 때에는 에러를 다시 던져서 처리하도록 한다.

 

방법은 다음과 같다.

 

  1. catch블록에서 모든 에러를 받아낸다.
  2. catch블록에서 에러를 처리하기위해 error를 분석한다.
  3. 에러의 처리방법을 알지 못하면 throw error를 통해 다시 던진다.

 

다시 던져진 에러는 try_catch 문 바깥으로 던져진다.

이 때, 바깥에는 반드시 try_catch 가 있어야 하고, 없다면 에러로 인해서 스크립트는 죽을것이다.

 

 

 


5. try_catch_finally

 

 

try_catch는 finally라는 코드 절을 하나 더 가질 수 있다.

 

finally는 try 블록, catch 블록 어느 곳이 끝나던 간에 실행되는 절이다.

 

어떤 상황에서든 반드시 실행해야하는 경우에 사용된다.

 

문법(Syntax)

try { 실행 코드 블럭 }
catch(error) { 에러 발생 및 처리 }
finally { 항상 실행 }

'JavaScript > Modern Javascript' 카테고리의 다른 글

Javascript - Symbol  (0) 2023.06.02
Javascript 객체 만들기  (0) 2023.01.17
Javascript 렉시컬 환경과 클로저  (0) 2023.01.15
Javascript 내장 객체 Date  (0) 2023.01.15
Javascript 구조 분해 할당  (0) 2023.01.15