에러관리, 예상못한 상황 대처 방식
서버에서 에러를 발생하지 않기 위해 예외처리 진행
에러가 발생하더라도 프로그램이 멈추지 않고 에러를 기록할 수 있다.
if 문으로 실행 조건을 거는 것이 아닌, try 를 실행하더라도 catch 가 실행될 수 있으니
if 문과 헷갈리지 말아야한다.
const users = ["Lee", "Kim", "Park", 2];
try {
for (const user of users) {
console.log(user.toUpperCase());
}
} catch (err) {
console.error(`Error: ${err.message}`);
}
// LEE
// KIM
// PARK
// Error: user.toUpperCase is not a function
해당 예제에선, 배열에 있는 숫자를 문자열로 인식 할 수 없어 에러를 출력한 모습이다.
즉시 현재 실행되고 있는 함수 실행을 멈추게 한다.
function withdraw(amount, account) {
if (amount > account.balance)
throw new Error("잔고가 부족합니다.");
account.balance -= amount;
console.log(`현재 잔고가 ${account.balance}남았습니다.`); // 출력되지 않음
}
const account = { balance: 1000 };
withdraw(2000, account);
// Error: 잔고가 부족합니다.
해당 예제이선, withdraw 라는 함수의 첫 번째, 인자값이 if 문의 balance 값 보다 컸을 경우, 에러를 발생하는 모습이다. 이건 else 문으로도 해결이 가능했을 텐데 적당한 예시가 더 필요할 것 같다.
try / catch 의 짝궁.
예외처리를 하고, 필요없는 자원을 삭제해 메모리를 관리한다.
function errorException(isThrow) {
try {
console.log('자원을 할당하였습니다.');
if (isThrow) throw new Error();
} catch (error) {
console.log('에러가 발생했습니다.');
} finally {
console.log('자원을 제거하였습니다.');
}
}
errorException(false);
// 자원을 할당하였습니다.
// 자원을 제거하였습니다.
errorException(true);
// 자원을 할당하였습니다.
// 에러가 발생했습니다.
// 자원을 제거하였습니다.
try catch 둘중 어느 부분을 통과하더라도, finally 는 실행된다.