본문 바로가기
Programming

JavaScript 에러 처리

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 9. 12.
반응형

🧨 자바스크립트 에러 처리 완전 정복 - try...catch와 커스텀 에러

에러는 예기치 못한 상황에서 발생합니다. 사용자 입력 오류, 서버 응답 오류, 파일 접근 실패 등 다양한 경우에 코드가 중단되지 않고 안전하게 실행되도록 하기 위해 예외 처리(Exception Handling)는 꼭 필요합니다.

📌 1. try...catch 기본 구조

try...catch 문은 오류가 발생할 가능성이 있는 코드를 안전하게 감싸고, 에러가 발생했을 때 catch 블록에서 이를 처리합니다.

try {
  // 에러가 발생할 수 있는 코드
  let result = riskyFunction();
  console.log(result);
} catch (error) {
  // 에러가 발생했을 때 실행됨
  console.error('오류 발생:', error.message);
} finally {
  // 선택적: 항상 실행됨 (성공 or 실패)
  console.log('작업 완료');
}
  • try: 정상 코드 실행
  • catch: 에러 발생 시 실행
  • finally: 무조건 실행 (선택 사항)

📌 2. 자바스크립트 기본 에러 종류

자바스크립트에는 내장된 다양한 에러 타입이 존재합니다.

  • ReferenceError: 선언되지 않은 변수를 참조할 때
  • TypeError: 잘못된 타입의 연산 수행
  • SyntaxError: 문법 오류
  • RangeError: 허용 범위를 벗어날 때
  • URIError: 잘못된 URI 사용
try {
  notDefinedVar++;
} catch (e) {
  console.error(e.name);    // ReferenceError
  console.error(e.message); // notDefinedVar is not defined
}

📌 3. 사용자 정의(커스텀) 에러

특정한 조건을 만족하지 않을 때 직접 에러를 던질 수도 있습니다.

✔ 예제: 로그인 유효성 검사

function login(username) {
  if (!username) {
    throw new Error('사용자 이름이 필요합니다.');
  }
  return `환영합니다, ${username}`;
}

try {
  login('');
} catch (e) {
  console.error('에러:', e.message);
}

✔ 커스텀 에러 클래스 만들기

class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = 'ValidationError';
  }
}

function validateEmail(email) {
  if (!email.includes('@')) {
    throw new ValidationError('올바른 이메일 형식이 아닙니다.');
  }
}

try {
  validateEmail('test.com');
} catch (e) {
  if (e instanceof ValidationError) {
    console.error('검증 실패:', e.message);
  } else {
    throw e; // 예기치 않은 에러는 다시 던지기
  }
}

📚 4. 마무리

에러를 잘 처리한다는 것은 사용자 경험을 지키고, 앱의 안정성을 높이는 중요한 개발자의 책임입니다. try...catch 구문과 커스텀 에러를 적절히 활용하면 에러가 발생해도 우아하게 대처할 수 있습니다.

반응형

'Programming' 카테고리의 다른 글

JavaScript 정규 표현식  (90) 2025.09.14
JavaScript JSON과 AJAX  (90) 2025.09.13
JavaScript import와 export  (108) 2025.09.11
JavaScript 프로토타입과 상속  (110) 2025.09.10
JavaScript this와 바인딩  (112) 2025.09.09