상세 컨텐츠

본문 제목

[Javascript] 예외처리 하기

Javascript

by 메타샤워 2023. 7. 17. 17:29

본문

javascript를 사용하다보면 exception을 handing하고 싶은경우가 있다.


에러가 나면 ie에서 노랗게 경고메세지를 알리는경우가 있는데 그렇게하면 알기가 힘들다.

이번기회에 exception을 공부할기회가 있어서 정리 하도록한다. 

또한 Node.js를 지원하는 완벽한 IDE가 딱히 없어(Web Storm이 있긴하지만..) 
 
나같은 경우엔 콘솔에서 바로 나오는 에러메시지를 보고 해결해 나가기 때문에 
 
서버사이드 Javascript의 Node.js를 사용하기 위해선 예외처리가 필수이다.
 
javascript 역시 다른 언어 같이 exception이 있다.

그리고 try,catch,finally,thorw 역시 존재한다.
 
그래서 간단히 exception의 사용법을 알아 보도록하자.

기본적은 구문은 다른 언어와 같이..
try{
......
} catch (e) {
..........(throw exception;)
} finally (
..........
}

 

이런식으로 다른언어와 별개 큰 차이는 없다.
 
다들 잘 아시겟지만 try에서 작업을 하다가 Exception이 일어나면 catch문에서 Exception들을 처리 할수 있다.

throw을 던져서 처리할 수도 있다.
 
마지막으로 finally를 꼭 수행한다.
 
(finally는 자윈의 리소스 반납들을 할때 사용한다. 가령 free()처럼
 
이 구문을 잘 사용 하면 메모리누수를 잘 방지 할 수 있다.
 
일반적인 언어와 크게 차이는 없다.)
 
다만 예외를 처리 하는 부분에서 차이가 있다면 흔히 Java나 C# 에서는 catch() 문의 괄호속에
 
여러 Exception들을 중첩하여 넣어 예외를 처리한다.
 
 
try{    
.........    
}    
catch(NullpointerExcetoin e){    
.........    
}    
catch(IOException e){    
.........    
}    
finally{    
.........    
}
위와 같이 catch문을 중첩하여 사용한다.
 
하지만 Javascript의 중첩 예외처리부분을 살펴 보자.
catch(e){    
  
    if(e instanceof TypeError){    
    ............    
    }    
    else if(e instanceof RangeError){    
    ............    
    }    
    else{    
    ............    
    }     
  
}​
위 처럼 한개의 catch문의 인자를 (e)로 만 두어서 e의 Exception종류가 어떤것인지를 내부에서 파악한다. 이때 
 
if문에서 instanceof 메소드를 통해서 e가 어떤 Exception인지를 검사하고 해당 분기문에서 예외를 처리한다.
 
자바 스크립트 1.5 기준으로 아래 6가지의 기본 Exception이 있다.
 
EvalError  - 잘못된 방법으로 eval()을 사용하였을 때
 
RangeError - 허락 되는 숫자 범위를 넘어갔을 때 
 
ReferenceError  - 허용되지 않은 참조를 사용했을 때 
 
SyntaxError  - 자바스크립트 파싱중 에러가 났을 때
 
TypeError  - 사용할수 없는 변수를 썻을 때
 
URIError  - encodeURI() 나 decodeURI()를 잘못된 방법으로 썻을 때
 
이 Exception 들은 name , message 라는 2가지 필드를 갖고 있는대, 당연히 name은 Exception의 이름,
 
message는 Exception 의 message를 말한다.
 
 
만약 사용자가 Exception을 직접 정의하고 싶다면

 

function UserException (message) {    
  
  this.message=message;    
  this.name="UserException";    
  
}    
  
myUserException=new UserException("Value too high");    
throw myUserException;
이런식으로 자신의 Exception을 만들어서 사용할수도 있다. ( 물론 이름은 마음대로 정해도 상관 없다  )

관련글 더보기