try / catch / finally는 “에러를 잡아서 프로그램이 죽지 않게 제어하는 장치”입니다.
에러가 발생할 수 있는 코드를 시도(try)하고,
에러가 나면 잡아서(catch) 처리하고,
무조건 실행해야 할 정리 작업을 finally에서 수행한다.
try {
// 에러가 발생할 수도 있는 코드
} catch (error) {
// 에러가 발생했을 때 실행
} finally {
// 에러 발생 여부와 상관없이 항상 실행
}
대표적인 예:
throw)const data = JSON.parse("잘못된 JSON");
// 여기서 바로 프로그램 에러 발생
try {
const data = JSON.parse("잘못된 JSON");
console.log(data);
} catch (error) {
console.log("JSON 형식이 올바르지 않습니다.");
}
👉 프로그램이 죽지 않고, 에러를 제어함
catch (error) {
console.log(error);
}
error 안에는:
등이 들어 있습니다.
실무에서는:
catch (error) {
console.error(error.message);
}
에러가 나든 안 나든 반드시 실행됩니다.
대표적인 예:
try {
setLoading(true);
fetchData();
} catch (error) {
alert("데이터를 불러오지 못했습니다.");
} finally {
setLoading(false);
}
👉 에러가 나도 로딩은 무조건 꺼짐
function withdraw(money) {
if (money <= 0) {
throw new Error("금액은 0보다 커야 합니다.");
}
return money;
}
try {
withdraw(-100);
} catch (error) {
console.log(error.message);
}
// ❌ 이렇게 쓰면 안 됨
try {
if (age < 20) throw new Error();
} catch {
console.log("미성년자");
}
👉 이건 그냥 if문으로 처리해야 합니다.
async function getData() {
try {
const res = await fetch(url);
const data = await res.json();
return data;
} catch (error) {
console.log("서버 요청 실패");
}
}
👉 비동기 함수에서는 try-catch가 사실상 필수
| 구문 | 역할 |
|---|---|
| try | 에러가 날 수 있는 코드 |
| catch | 에러 발생 시 처리 |
| finally | 무조건 실행 |
try : 시도catch : 실패 시 대응finally : 무조건 정리“실패할 수도 있지만, 프로그램은 멈추면 안 될 때”
그때 try / catch / finally를 씁니다.