언어 및 도구들 공부/Javascript

에러 클래스 생성자 파라미터

Dr.Mlem 2024. 9. 3. 21:54

그럼 아래의 자바스크립트 코드(실습문제 21-06 에 참조되는 RegexHelper.js 부분)에서,


class StringFormatException extends Error{

    // 입력 요소에 대한 selector (추가)

    #selector;

 

    // 입력 요소를 두 번째 파라미터로 전달받는다(수정)

    constructor(msg='잘못된 요청입니다', selector =  undefined){

        super(msg);

        super.name = 'stringFormatException';

        // 멤버 변수에 입력요소를 참조시킨다(추가).

        this.#selector = selector;

       

    }

    get selector(){

        return this.#selector;

    }

 

    // 입력 요소의 selector에 해당하는 HTMLElement 객체 반환

    get element(){

        const el = this.#selector !== null ? document.querySelector(this.#selector) : undefined;

        return el;

    }

}

 

 super(msg); 는 어떻게 돌아가는거야?

여기에 있는 생성자에 들어가는 파라미터는 2개인데, 하나만 넣고 super(); 를 돌리면 어떻게 되는거야?


답안 표시
 
 

네, 설명드리겠습니다.

super(msg); 작동 방식

  1. StringFormatException 클래스는 Error 클래스를 상속받습니다. 따라서 StringFormatException의 인스턴스는 Error 객체의 모든 속성과 메서드를 물려받습니다.
  2. StringFormatException의 생성자에서 super(msg)를 호출합니다. 이는 부모 클래스인 Error의 생성자를 호출하는 것입니다.
  3. Error 클래스의 생성자는 하나의 매개변수 message를 받아서 에러 메시지를 설정합니다.
  4. super(msg)를 호출하면 msg 값이 Error 생성자의 message 매개변수에 전달됩니다.
  5. 결과적으로, 새로 생성된 StringFormatException 객체는 Error 객체의 message 속성을 상속받고, 그 값은 msg로 초기화됩니다.

생성자에 파라미터 2개, super() 호출 시 1개만 전달하면?

  • StringFormatException의 생성자는 msgselector 두 개의 매개변수를 받습니다.
  • 하지만 super() 호출 시에는 msg 하나만 전달하고 있습니다.
  • 이 경우, Error 클래스의 생성자는 msg 값만 받아서 message 속성을 초기화하고, selector는 사용되지 않습니다.
  • StringFormatException의 생성자는 계속해서 실행되며, super.name = 'StringFormatException'this.#selector = selector를 통해 추가적인 초기화를 수행합니다.

결론

  • super(msg)는 부모 클래스(Error)의 생성자를 호출하여 msg를 에러 메시지로 설정합니다.
  • 자식 클래스 생성자에 전달된 파라미터 중 일부만 super()에 전달하는 것은 가능하며, 나머지 파라미터는 자식 클래스 생성자 내에서 다른 용도로 사용될 수 있습니다.
  • 이 경우, 부모 클래스 생성자는 전달받은 파라미터만 사용하여 초기화를 수행하고, 나머지 파라미터는 무시됩니다.

주의 사항

  • 부모 클래스의 생성자가 특정 매개변수를 필수로 요구하는 경우, super() 호출 시 해당 매개변수를 전달하지 않으면 에러가 발생할 수 있습니다.
  • 자식 클래스 생성자에서 super()를 호출하지 않으면 this 키워드를 사용할 수 없으므로, 반드시 super()를 호출해야 합니다.
 
 
 
 
 
 

그러면 부모 클래스인 (error)는 생성자로 만들 때 파라미터를 뭐든간에 하나만 넣으면, 그게 에러메시지가 되는거야?

 
답안 표시
 

네, 맞습니다. 부모 클래스인 Error는 생성자로 만들 때 파라미터를 하나만 넣으면, 그 값이 에러 메시지가 됩니다.

JavaScript
const myError = new Error("이것은 에러 메시지입니다.");
console.log(myError.message); // 출력: "이것은 에러 메시지입니다."
코드를 사용할 때는 주의가 필요합니다.
 

Error 생성자의 매개변수

  • Error 생성자는 선택적으로 하나의 매개변수 message를 받습니다.
  • message는 에러 메시지를 나타내는 문자열입니다.
  • message를 전달하지 않으면, 기본적으로 빈 문자열이 에러 메시지로 설정됩니다.

Error 객체의 message 속성

  • Error 객체는 message라는 속성을 가지고 있습니다.
  • 생성자에 전달된 message 값은 이 message 속성에 저장됩니다.
  • Error 객체를 throw하거나 console.error()로 출력하면,message 속성에 저장된 값이 에러 메시지로 표시됩니다.

주의 사항

  • Error 생성자는 message 외에도 다른 선택적 매개변수들을 받을 수 있습니다. (예: fileName, lineNumber, columnNumber)
  • 하지만 일반적으로는 message만 전달하여 에러 메시지를 설정하는 것이 가장 일반적인 사용 방법입니다.

결론

Error 생성자에 하나의 파라미터를 전달하면, 그 값이 에러 메시지로 설정됩니다. 이는 자바스크립트에서 에러를 생성하고 처리하는 기본적인 방식입니다.

'언어 및 도구들 공부 > Javascript' 카테고리의 다른 글

RegexHelper  (0) 2024.09.04
document.querySelector(); 로 지정된 대상  (0) 2024.09.03
super()  (0) 2024.09.03
cookie의 필수요소  (0) 2024.09.03
Object.fromEntries() 메소드  (0) 2024.09.02