class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 부모 클래스(Animal)의 생성자 호출
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Buddy', 'Golden Retriever');
dog.speak(); // 출력: Buddy barks.
이 코드에서, super(name); 이 하는 작업은 뭐야?
답안 표시

이 코드에서 super(name);은 부모 클래스인 Animal의 생성자를 호출하여 name 속성을 초기화하는 역할을 합니다.
자세한 설명:
- 클래스 상속: class Dog extends Animal은 Dog 클래스가 Animal 클래스를 상속받는다는 것을 의미합니다. 이는 Dog가 Animal의 모든 속성과 메서드를 물려받는다는 뜻입니다.
- 생성자 상속: 자식 클래스(Dog)도 자신의 생성자(constructor)를 가질 수 있습니다. 하지만 자식 클래스의 생성자에서는 super()를 호출하여 부모 클래스(Animal)의 생성자를 반드시 실행해야 합니다.
- super(name)의 역할:
- super(name)은 부모 클래스(Animal)의 생성자를 호출하고, name 값을 전달합니다.
- 부모 클래스의 생성자는 전달받은 name 값을 사용하여 this.name = name;을 실행하여 자신의 name 속성을 초기화합니다.
- 결과적으로, 자식 클래스(Dog)의 인스턴스는 부모 클래스(Animal)로부터 상속받은 name 속성을 갖게 됩니다.
- this.breed = breed: 자식 클래스(Dog)의 생성자는 super(name) 호출 후에 this.breed = breed;를 실행하여 자신의 breed 속성을 추가로 초기화합니다.
요약:
- super(name);은 부모 클래스(Animal)의 생성자를 호출하여 name 속성을 초기화합니다.
- 이를 통해 자식 클래스(Dog)의 인스턴스는 부모 클래스로부터 상속받은 name 속성을 갖게 되고, 추가로 자신의 breed 속성도 갖게 됩니다.

super(name);은 부모 클래스(Animal)의 생성자를 호출하여 name 속성을 초기화합니다.
여기서 초기화 한다는게 무슨 말이야?
답안 표시

초기화란 객체를 생성할 때 객체의 속성(property)에 처음으로 값을 할당하는 과정을 의미합니다.
super(name);의 초기화 과정:
- 객체 생성: new Dog('Buddy', 'Golden Retriever') 코드를 실행하면, 먼저 빈 Dog 객체가 생성됩니다. 이 객체는 아직 아무런 속성도 가지고 있지 않습니다.
- super(name) 호출: Dog 클래스의 생성자 내부에서 super(name)을 호출합니다. 이는 부모 클래스인 Animal의 생성자를 호출하는 것입니다.
- 부모 클래스 생성자 실행: Animal 클래스의 생성자가 실행되면서 this.name = name; 코드가 실행됩니다. 여기서 this는 새로 생성된 Dog 객체를 가리키고, name은 super(name) 호출 시 전달된 'Buddy' 값입니다.
- name 속성 초기화: 결과적으로, Dog 객체의 name 속성에 'Buddy' 값이 할당됩니다. 이것이 바로 name 속성의 초기화입니다.
- 자식 클래스 생성자 실행: super(name) 호출 이후, Dog 클래스의 생성자는 계속 실행됩니다. this.breed = breed;를 통해 Dog 객체의 breed 속성을 'Golden Retriever'로 초기화합니다.
따라서, super(name);은 부모 클래스의 생성자를 호출하여 자식 클래스 객체의 name 속성을 처음으로 값을 할당(초기화)하는 역할을 합니다.
초기화의 중요성:
- 객체의 일관성 유지: 객체가 생성될 때 필요한 속성들을 초기화하여 객체의 상태를 일관되게 유지합니다.
- 오류 방지: 초기화되지 않은 속성에 접근하려고 하면 예상치 못한 동작이나 오류가 발생할 수 있습니다.
- 코드 가독성 향상: 객체 생성 시 필요한 초기화 작업을 생성자에 명시적으로 작성하여 코드의 가독성을 높입니다.
핵심:
- 초기화: 객체 생성 시 속성에 처음으로 값을 할당하는 과정
- super(name): 부모 클래스의 생성자를 호출하여 자식 클래스 객체의 name 속성을 초기화
'언어 및 도구들 공부 > Javascript' 카테고리의 다른 글
document.querySelector(); 로 지정된 대상 (0) | 2024.09.03 |
---|---|
에러 클래스 생성자 파라미터 (0) | 2024.09.03 |
cookie의 필수요소 (0) | 2024.09.03 |
Object.fromEntries() 메소드 (0) | 2024.09.02 |
자바스크립트에서의 position? (0) | 2024.09.02 |