try catch
: 코드 실행 중에 발생할 수 있는 오류를 처리하기 위해 사용
- 에러가 발생해도 프로그램이 죽지 않도록 하기 위해 사용(= 보험)
- 서버에서 데이터를 가져오는 경우(통신하는 경우) 반드시 try catch문 사용
- finally는 에러 발생과 상관없이 기본적으로 실행됨
- 에러가 발생하지 않아서 try문이 실행되어도 실행됨
- 에러가 발생해서 catch문이 실행되어도 실행됨
try {
...
}
catch (err) {
// 에러 핸들링
} finally {
// 에러 발생과 관계없이 무조건 실행됨
}
* err.name: 에러 이름
* err.message: 에러 내용
- 오직 런타임 에러에만 동작
- 동기적으로 동작
- 코드가 문법적으로 잘못된 경우엔 try..catch가 동작하지 않음
try {
console.log(value);
} catch (e) {
console.log(e.name); // ReferenceError
console.log(e.message); // value is not defined
} finally {
console.log("finally 실행");
}
예시
try {
const data = JSON.stringify({
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
})
const user = JSON.parse(data);
console.log(user.name); // Leanne Graham
console.log(user.value);
if (!user.value) {
throw new ReferenceError('해당 키 값은 존재하지 않습니다.')
}
} catch (error) {
console.log('JSON Error : ' + error.message);
}
throw 연산자 ⛔
: 에러(오류)를 발생시키는 키워드
- 코드 실행 도중 명시적으로 에러를 발생시키고 싶을 때 사용
- throw가 실행되면 해당 위치에서 즉시 실행이 중단됨
- try...catch 안에서 처리하는 게 일반적
- try catch 문 사용 시 try 안에서 사용함
throw 문자열 / Error 객체 등
- throw 뒤에 오는 값은 임의의 값(문자열, 숫자, 에러 인스턴스 등), 객체 등 모두 가능함
- 다만 관례적으로는 Error 객체를 던지는 게 좋음
throw "에러 발생!"; // 문자열
throw 123; // 숫자
try {
throw {
name: 'MyCustomError',
message: '이것은 커스텀 에러 메시지입니다.',
code: 500,
};
} catch (e) {
console.log('에러 이름:', e.name);
console.log('에러 메시지:', e.message);
console.log('에러 코드:', e.code);
}
throw new Error("이건 에러 메시지입니다."); // Error 객체 (권장)
에러 객체 생성
- JS는 Error, SyntaxError, ReferenceError, TypeError등의 표준 에러 객체 관련 생성자를 지원함
new Error('에러 메세지')
new SyntaxError()
new ReferenceError()
'try..catch'와 에러 핸들링
ko.javascript.info