JavaScript에서 오류 처리: Try, Catch, Finally
Source: Dev.to
🚨 JavaScript에서 오류란 무엇인가요?
오류는 코드 실행 중(런타임) 발생하는 문제입니다.
예시
console.log(x); // ❌ ReferenceError: x is not defined
흔히 발생하는 오류 유형
- ReferenceError – 변수가 정의되지 않음
- TypeError – 잘못된 타입 사용
- SyntaxError – 유효하지 않은 코드
😵 오류 처리 없이 발생하는 문제
function divide(a, b) {
return a / b;
}
console.log(divide(10, 0));
console.log("This may still run...");
일부 오류는 앱을 중단시키거나 예기치 않은 동작을 일으킬 수 있습니다.
💡 try와 catch 사용하기
try...catch 블록을 사용하면 오류를 안전하게 처리할 수 있습니다.
try {
let result = riskyFunction();
console.log(result);
} catch (error) {
console.log("Something went wrong:", error.message);
}
📊 흐름
try 블록 실행
↓
오류 발생?
↓ 예
catch 블록 실행
↓
프로그램이 안전하게 계속 진행
📥 catch 블록 이해하기
try {
console.log(x);
} catch (error) {
console.log(error.name); // ReferenceError
console.log(error.message); // x is not defined
}
error 객체는 디버깅에 유용한 정보를 제공합니다.
🧹 finally 블록
finally 블록은 오류가 발생하든 안 하든 항상 실행됩니다.
try {
console.log("Trying...");
} catch (error) {
console.log("Error occurred");
} finally {
console.log("This always runs");
}
📊 실행 순서
try → catch (오류가 있으면) → finally
🔥 사용자 정의 오류 발생시키기
throw를 사용해 직접 오류를 만들 수 있습니다.
function withdraw(balance, amount) {
if (amount > balance) {
throw new Error("Insufficient balance");
}
return balance - amount;
}
try {
withdraw(1000, 1500);
} catch (err) {
console.log(err.message);
}
🧠 사용자 정의 오류를 사용하는 이유
- 디버깅이 쉬워짐
- 명확한 오류 메시지 제공
- 프로그램 흐름 제어 가능
🛠️ 실제 예시
function parseJSON(data) {
try {
return JSON.parse(data);
} catch (err) {
console.log("Invalid JSON");
return null;
}
}
❓ 오류 처리가 중요한 이유
- ✅ 1. 충돌 방지 – 문제가 발생해도 앱이 계속 실행됩니다.
- ✅ 2. 사용자 경험 향상 – 사용자는 깨진 화면 대신 의미 있는 메시지를 보게 됩니다.
- ✅ 3. 디버깅 용이 – 무엇이 잘못됐는지 명확히 알 수 있습니다.
- ✅ 4. 우아한 실패
잘못된 예:
// app crashes ❌
올바른 예:
// show error message ✅
// continue execution ✅
⚠️ 중요한 참고 사항
try...catch는 런타임 오류에만 작동합니다.- 구문 오류는 잡히지 않습니다.
- 동기적으로 동작하며, 비동기(
async/await)는 별도 처리가 필요합니다.
🧠 모범 사례
try블록은 작게 유지하세요.- 의미 있는 오류 메시지를 사용하세요.
- 오류를 무시하지 마세요.
- 정리 작업(리소스 해제 등)은
finally에서 수행하세요.
🚀 마무리 생각
오류 처리는 선택 사항이 아니라 필수입니다. try, catch, finally를 활용하면:
- 견고한 애플리케이션을 만들 수 있습니다.
- 실패를 우아하게 처리할 수 있습니다.
- 디버깅과 유지 보수가 쉬워집니다.
🧠 빠른 요약
- 오류는 런타임에 발생합니다.
try→ 코드를 테스트합니다.catch→ 오류를 처리합니다.finally→ 항상 실행됩니다.throw→ 사용자 정의 오류를 생성합니다.