Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 사용자 정의 예외(Custom Exception)를 정의하고 처리하는 방법

JavaScript에서는 throw 문과 try...catch 블록을 조합하여 개발자가 직접 사용자 정의 예외(custom exception)를 만들고 처리할 수 있습니다. 기본 제공되는 오류 유형만으로는 부족할 때, 상황에 맞는 의미 있는 오류 메시지를 직접 던지면 코드의 가독성과 디버깅 효율이 크게 향상됩니다.

기본 예제: throw와 try...catch 활용하기

다음 예제는 0으로 나누는 상황을 감지하여 사용자 정의 예외를 발생시키고, 이를 catch 블록에서 처리하는 전체 HTML 코드입니다.

<html>
   <head>
      <script>
         function myFunc() {
            var a = 30;
            var b = 0;

            try {
               if (b == 0) {
                  // 사용자 정의 예외 발생
                  throw "Divide by zero error.";
               } else {
                  var c = a / b;
               }
            }
            catch (e) {
               alert("Error: " + e);
            }
         }
      </script>
   </head>
   <body>
      <p>아래 버튼을 클릭하면 결과를 확인할 수 있습니다:</p>

      <form>
         <input type="button" value="클릭" onclick="myFunc();" />
      </form>
   </body>
</html>

코드 동작 원리

  • 조건 검사: 나누는 값 b가 0인지 확인합니다.
  • 예외 발생: 조건이 참이면 throw 문으로 문자열 형태의 오류 메시지를 던집니다.
  • 예외 처리: catch 블록이 던져진 값을 받아 알림 창으로 사용자에게 오류를 안내합니다.

더 나은 방식: Error 객체 확장하기

문자열을 그대로 던지는 것보다 Error 객체를 상속한 사용자 정의 에러 클래스를 만드는 것이 좋습니다. 이렇게 하면 오류의 이름(name)과 스택 추적(stack trace) 정보를 함께 활용할 수 있어 디버깅이 훨씬 수월해집니다.

// 사용자 정의 에러 클래스 정의
class DivideByZeroError extends Error {
  constructor(message) {
    super(message);
    this.name = "DivideByZeroError";
  }
}

function divide(a, b) {
  if (b === 0) {
    throw new DivideByZeroError("0으로 나눌 수 없습니다.");
  }
  return a / b;
}

try {
  console.log(divide(30, 0));
} catch (e) {
  console.error(`${e.name}: ${e.message}`);
}

정리

간단한 상황에서는 문자열이나 일반 객체를 throw 하는 방식으로도 충분하지만, 실무에서는 Error 클래스를 확장한 사용자 정의 예외를 사용하는 것이 권장됩니다. 오류 유형을 명확히 구분할 수 있어 instanceof 연산자로 특정 예외만 골라 처리하는 등 더 정교한 예외 처리 로직을 구현할 수 있습니다.