Front-end/JavaScript

JS 에러 핸들링 5편 - 에러 객체 커스텀

파리외 개발자 2023. 10. 30. 22:02

에러는 생성자를 가지는 객체이기 때문에 얼마든지 객체처럼 다룰 수 있다.

 

에러 객체 상속

class authenticationError extends Error {
  constructor(message) {
    super(message);
    this.name = "authenticationError";
    this.favoriteSnack = "chitos";
  }
}

const a = new authenticationError("cause err");
console.log(a.favoriteSnack);

인증 에러라는 새로운 클래스를 생성하고 Error 객체를 상속받은 후

부모의 멤버변수인 message를 생성자에 집어넣고 커스텀 하고 싶은 속성인

name과 favoriteSnack을 정의했다.

해당 생성자로 생성된 변수인 a는 에러 메시지와 새롭게 정의한 변수들에 접근할 수 있게 된다.

 

에러 객체 오버라이딩

class DBError extends Error {
  constructor(message) {
    super(message);
    this.name = "DBErr";
    this.message = "user dont need to see it";
  }
}

const dbErr = new DBError("stuck");
dbErr.message;

이번에는 DB만을 위한 에러 객체를 새롭게 정의하고

상속받은 에러 객체의 멤버 변수인 message를 새롭게 정의했다.

이번에도 에러 생성자처럼 dbErr변수를 생성한 후 message에 접근해 보면

원래의 에러 생성자라면 message에 stuck이 담겨야 맞는데

새롭게 오버라이딩 한 message의 문자열이 대신 출력된다.

해당 인스턴스 객체는 DBError의 인스턴스 이기도 하며

에러 객체의 인스턴스 이기도 하다.

이처럼 특정 상황에서만 사용되는 에러 객체를 커스텀할 수 있다.