이전에 작성한 예외처리 글을 생각해 봅시다. 왜 예외처리를 하는 건가요? 바로 에러를 잡기 위해서입니다. 자바스크립트는 싱글스레드여서 에러가 발생하게 되면 서버가 죽는 경우를 많이 겪으실 텐데요. 그래서 우리가 마주할 다양한 에러 객체들과 어떤 방식으로 처리할 수 있는지 알아보도록 하겠습니다.
new Error()
우리가 코드를 짜다보면 가장 많이 만나는 SyntaxError, TypeError, ReferenceError 이 삼대장 기억하시나요? 에러는 기본적으로 javascript에서 코드를 읽고 동작을 하게 됐을 때 문제가 생기면 내장 에러 객체를 이용하여 에러를 우리에게 보여주게 됩니다. 하지만 에러는 우리가 직접적으로 만들 수도 있는데요. 바로 에러 객체를 통해서 만들 수 있습니다.
에러객체는 Error, SyntaxError, ReferenceError 이렇게 3가지가 존재하는데요 에러 생성은 간단합니다.
const error = new Error("이 에러는 어떤 에러입니다")
console.log(error.name) // Error
console.log(error.message) // 이 에러는 어떤 에러입니다
throw
에러를 만들고 끝내는게 아니라 에러 처리를 하기 위해서 전달을 해주어야 하는데 그게 바로 throw입니다. throw를 하게 되면 return처럼 아래 코드를 읽지 않고 에러를 전달을 해주게 됩니다.
function errorTest(){
let data;
if("1" == 1){
throw new Error("문자열불일치");
data = 1+1;
} else {
data = 1-1;
}
return data
}
const result = errorTest();
console.log(result)
에러를 발생하기 위해서 위와 같은 코드를 생성을 해 보았습니다. 조건이 일치할 경우에 throw를 사용하여 새로운 에러를 생성하고 그 에러 메세지를 문자열 불일치로 만들어 보았습니다. 이 코드의 result 값은 어떤 값을 내보낼까요? 2? 0? 정답은 오로지 Error 만을 내보내고 data의 값을 내보내지 않게 됩니다.
이처럼 우리가 예외처리를 할때 컴퓨터는 본인 기준에 맞는 에러를 걸러냅니다. 하지만 컴퓨터 기준에는 에러가 아니지만 우리가 기준일 때 에러인 경우에는 이런 식으로 에러를 생성해서 전달을 해줄 수가 있게 되는 것입니다.
try catch
기존에 우리가 if else 문으로 예외처리를 했다면 또다른 방법으로는 try catch 문이 존재합니다.
if else 문과 try catch문은 어떤 차이가 존재할까요?
if else | try catch |
조건이 일치할때만 예외처리 | 컴퓨터 기준 코드가 이상한 경우 에러처리 |
조건이 많으면 if문이 여러개 생성 | 조건이 많아도 try catch는 한개만 생성 |
에러 처리 공간이 따로 없음 | catch문에서 에러 처리 가능 |
if문안에서 에러를 생성하고 throw를 통해서 전달을 한들 에러 처리를 어디서 할 수 있을까요? 바로 try catch에서 해결할 수 있습니다.
try {
const user = {"name" : "둥둥"}
let data = user.gender
return data;
} catch(err) {
console.log(err)
}
위와 같은 코드가 있다면 컴퓨터는 따로 에러를 발견하지 못하고 data 값을 undefined로 내보내게 됩니다. 하지만 우리가 원하는 데이터가 아니게 됩니다. 이때 throw를 사용하여 에러를 생성해 주는 것입니다.
try {
const user = { name: "둥둥" };
let data = user.gender;
if (data == undefined) {
throw new Error("유저 성별없음");
}
console.log(data);
} catch (err) {
console.log(err);
}
즉, try catch문을 사용하게 되면 if로 내 기준의 에러를 생성할 수도, 코드자체의 에러인 경우에도 확인이 가능하여 내가 잡아내지 못하는 에러를 발견하여 에러처리가 가능하게 되는 것입니다.
try {
if (data) {
// 내가 원한 결과 == 에러없음
return res.status(StatusCodes.OK).json(data);
} else {
// 컴퓨터가 봤을때는 정상이지만 내가 원하지 않던 에러
return res.status(StatusCodes.NOT_FOUND).end();
}
} catch (err) {
// try에서 발생할 수 있는 모든 에러
return res.status(StatusCodes.BAD_REQUEST).end();
}
'프로그래밍📚 > javascript' 카테고리의 다른 글
strict mode( 엄격 모드 ) (0) | 2024.01.22 |
---|---|
비동기 처리방법 async/await (0) | 2024.01.11 |
비동기 처리 방법 Promise (0) | 2024.01.11 |
{} 빈 객체 확인하는 방법 (0) | 2023.12.14 |
Array.find (0) | 2023.12.13 |