그럼 아래의 자바스크립트 코드(실습문제 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); 작동 방식
- StringFormatException 클래스는 Error 클래스를 상속받습니다. 따라서 StringFormatException의 인스턴스는 Error 객체의 모든 속성과 메서드를 물려받습니다.
- StringFormatException의 생성자에서 super(msg)를 호출합니다. 이는 부모 클래스인 Error의 생성자를 호출하는 것입니다.
- Error 클래스의 생성자는 하나의 매개변수 message를 받아서 에러 메시지를 설정합니다.
- super(msg)를 호출하면 msg 값이 Error 생성자의 message 매개변수에 전달됩니다.
- 결과적으로, 새로 생성된 StringFormatException 객체는 Error 객체의 message 속성을 상속받고, 그 값은 msg로 초기화됩니다.
생성자에 파라미터 2개, super() 호출 시 1개만 전달하면?
- StringFormatException의 생성자는 msg와 selector 두 개의 매개변수를 받습니다.
- 하지만 super() 호출 시에는 msg 하나만 전달하고 있습니다.
- 이 경우, Error 클래스의 생성자는 msg 값만 받아서 message 속성을 초기화하고, selector는 사용되지 않습니다.
- StringFormatException의 생성자는 계속해서 실행되며, super.name = 'StringFormatException'과 this.#selector = selector를 통해 추가적인 초기화를 수행합니다.
결론
- super(msg)는 부모 클래스(Error)의 생성자를 호출하여 msg를 에러 메시지로 설정합니다.
- 자식 클래스 생성자에 전달된 파라미터 중 일부만 super()에 전달하는 것은 가능하며, 나머지 파라미터는 자식 클래스 생성자 내에서 다른 용도로 사용될 수 있습니다.
- 이 경우, 부모 클래스 생성자는 전달받은 파라미터만 사용하여 초기화를 수행하고, 나머지 파라미터는 무시됩니다.
주의 사항
- 부모 클래스의 생성자가 특정 매개변수를 필수로 요구하는 경우, super() 호출 시 해당 매개변수를 전달하지 않으면 에러가 발생할 수 있습니다.
- 자식 클래스 생성자에서 super()를 호출하지 않으면 this 키워드를 사용할 수 없으므로, 반드시 super()를 호출해야 합니다.

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

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