JavaScript에서 오류 처리: Try, Catch, Finally

발행: (2026년 4월 4일 PM 02:45 GMT+9)
5 분 소요
원문: Dev.to

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...");

일부 오류는 앱을 중단시키거나 예기치 않은 동작을 일으킬 수 있습니다.

💡 trycatch 사용하기

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 → 사용자 정의 오류를 생성합니다.
0 조회
Back to Blog

관련 글

더 보기 »

JavaScript에서 디스트럭처링

이런 코드를 작성해 본 적 있나요? js // 반복적인 추출 const numbers = 10, 20, 30; const first = numbers0; const second = numbers1; 작동은 하지만—…

동기 vs 비동기 JavaScript

JavaScript는 single‑threaded이지만, synchronous와 asynchronous 동작을 사용하여 여러 작업을 효율적으로 처리할 수 있습니다. What Is Synchronous Code? Synchronous…

TypeScript 타입 가드

결제 시스템을 구축할 때, “대충 맞다”는 충분하지 않습니다. 하나의 undefined 값이나 일치하지 않는 object property가 차이를 만들 수 있습니다…