코드를 짜다보면 흔하게 예외처리를 할 때가 항상 오기 마련이다.
예외 처리 하는방법은 많겠지만 try catch 문과 throw Error를 사용하는 것이 일반적이다. 하단 예시를 보자
일반적인 예외 처리 방법
const test =()=>{
try{
console.log('1');
throw new Error('error')
console.log('2');
}
catch(e){
console.log("error:",e);
}
}
코드에 보면 throw와 Error 객체이 위치해 있는 것을 알 수 있습니다. 사용법은 알지만 throw와 Error객체를 면밀히 살펴본 적은 없는데요. 이번기회에 조금 살펴보았으니 궁금하시면 하단을 참고하시면 됩니다.
throw 설명
1. Mdn을 보면 throw는 사용자 정의 예외를 발생 할 수 있다.
2. 예외를 발생시키면 현재 함수의 실행 중지시킨다. ( = thorow 이후의 명령문은 실행 되지 않는다 )
3. 제어 흐름은 콜스택의 첫 번째 catch 블록으로 전달된다
~ 라고 나와 있다.
1번, 2번 사항을 직접 코드로 확인해보자
const throwValue =()=>{
throw 'throwValue'
}
const test =()=>{
console.log('1');
throwValue()
console.log('2');
}
test() // 실행
위 코드를 실행하고 로그를 확인하면 아래와 같이 '1'만 찍히고 '2'는 안찍힌다. 그리고 빨간색 줄로 Uncaught throwValue 라는 문구가 나온다. 여기서 알 수 있듯이 throw가 생성되면 함수의 실행을 중지 시키고 사용자가 정의한 예외를 발생 할 수 있음을 확인 할 수 있다. 그 예외는 빨간색줄과 Uncaught 라는 문구와 로그에 확인된다.
3번 사항을 코드로 확인해보자
const throwValue =()=>{
throw 'throwValue'
}
const test =()=>{
try{
console.log('1');
throwValue()
console.log('2');
}
catch(){
console.log('3');
}
}
test() // 실행
위 코드 실행시 console에 아래와 같이 찍힘을 확인 할 수 있다. 추가적으로 try에서 발생된 throw는 콘솔에 찍히지 않는다. 아마 try, catch 문으로 인한 영향인 듯하다
Error 객체 설명
Error 객체는 런타임 오류가 발생했을때 던져진다.
Error 객체는 사용자 지정 예외의 기반 객체로 사용할 수 있다.
Error 객체의 property를 확인해보자!
typescript에 정의된 interface를 직접 들춰보니 Error 객체의 property에는 name, message, stack이 있었다. 그래서 그 각각의 값들을 직접 콘솔로 찍어 보았다.
const error = new Error('error message');
console.log("1",error.message); // error message
console.log("2",error.name); // Error
console.log("3",error.stack); // Error: error message
console.log("4",error); // Error: error message
위 코드를 결과를 보아하니 message는 우리가 Error 객체를 정의하면서 전달한 'error message' 라는 문자열이 error.message로 할당된 것으로 보이고 error.name은 Error라는 객체의 이름이, error.stack은 name과 message가 합쳐진 값으로 보인다. 그리고 error의 property말고 객체 자체를 log로 출력해보니 error.stack과 같은 값이 log에 찍혔다.
영상자료
참고하면 좋은 영상 https://www.youtube.com/watch?v=EBmIHrLTVdg
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/throw
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Error
'Javascript' 카테고리의 다른 글
[JS] base64 img data를 img File 형태로 변경하기 (0) | 2024.05.18 |
---|---|
[JS] 미리보기 이미지 구현하기 ( FileReader, FileReader.readAsDataURL() 이용 ) (0) | 2024.05.15 |
Object.is() 개념잡기 (0) | 2023.11.21 |
프로그래머스 코딩테스트 풀이(js) > 완주하지못한선수(lv1) (0) | 2023.08.04 |
프로그래머스 코딩테스트 풀이(js) > 땅따먹기(lv2) (0) | 2023.08.03 |