티스토리 뷰





반응형

Error 객체

자바스크립트에는 내장된 Error 객체가 있고 이 객체는 에러 처리에 간편하게 사용할 수 있습니다. Error 인스턴스를 만들면서 에러 메시지를 지정할 수 있습니다.

const err = new Error("invalid email");

이렇게 인스턴스를 만드는 것만으로는 아무일도 일어나지 않습니다. 이 인스턴스는 에러와 통신하는 수단입니다. 좀더 유효하게 사용하는 예제를 보도록 합시다.

function validateEmail(email){
  return email.match(/@/)? email : new Error(`invalid email: ${email}`);
}

const email = 'jane@doe.com';
const validatedEmail = validateEmail(email);

if(validateEmail instanceof Error)
  console.log(`Error: ${validateEmail.message}`);
else
  console.log(`Valid email: ${validateEmail}`); 

반환 받은 변수를 instanceof 로 Error 객체가 있는지 판별하고 에러가 발생 했다면 에러 메시지는 해당 변수 message에 저장되어 있을 것입니다.

try/catch와 예외처리

앞의 예제와 같은 방식으로 예상 가능한 에러는 처리할 수 있습니다. 하지만 전혀 예상치 못했던 에러가 일어날 가능성은 여전합니다. 지금대로라면 이전 예제의 함수는 email에 null, 숫자, 객체 등 문자열이 아닌 무언가가 들어온다면 에러를 일으킵니다. 프로그램은 앞뒤 설명 없이 멈춰버리겠죠. 이렇게 예상치 못한 에러에 대처하려면 try...catch문으로 코드 전체를 감쌀 수 있습니다.

const email = null;

try{
  const validatedEmail = validateEmail(email);

  if(validateEmail instanceof Error)
    console.log(`Error: ${validateEmail.message}`);
  else
    console.log(`Valid email: ${validateEmail}`);
    
}catch(err){
  console.log(`Error: ${err.message}`);
}

에러를 캐치했으므로 프로그램은 멈추지 않습니다. 에러를 기록하고 계속 진행할 수 있습니다. 물론 문제가 해결된것은 아닙니다. 유효한 이메일 주소가 필수라면 프로그램이 계속 진행될 수 없기는 마찬가지겠죠. 하지만 최소한 앞뒤 사정도 모르고 그냥 멈추는 일은 막을 수 있습니다. 

 

실행 흐름은 에러가 일어나는 즉시 catch블록으로 이동합니다. try블록 안에 쓸 수 있는 문의 숫자에 제한은 없습니다. 그중 에러가 일어나는 문에서 실행 흐름을 catch 블록으로 넘깁니다. 에러가 일어나지 않으면 catch 블록은 실행되지않음

에러 일으키기

에러를 일으키기만 기다릴 필요 없이 직접 에러를 일으켜서 예외 처리 작업을 시작할 수도 있습니다. 예를 들어 은행 애플리케이션에 사용할 현급 인출 기능을 만든다고 생각해 봅시다. 계좌의 잔고가 요청받은 금액보다 적으면 예외를 일으켜야 할 겁니다.

function billPay(amount, payee, account){
  if(amount > account.balance)
    throw new Error('insufficient funds');
  account.transfer(payee, amount);
}

throw를 호출하면 현재 함수는 즉시 실행을 멈춥니다.

 

 

 

 

 

 

 

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31