JavaScript에서 상속은 객체의 프로토타입 체인을 통해 구현됩니다. 클래스 기반 언어와 달리, JavaScript는 프로토타입 기반 언어입니다. 하나의 객체가 다른 객체로부터 속성과 메서드를 상속받을 수 있습니다.
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
speak() {
super.speak(); // 부모 클래스의 speak 메서드 호출
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Rex');
dog.speak();
Rex makes a noise.
Rex barks.
extends
키워드를 사용하여 다른 클래스를 상속받습니다.
super
키워드를 사용하여 부모 클래스의 메서드에 접근할 수 있습니다.
프로토타입 체인을 통해 메서드와 속성을 상속받습니다.
instanceof 연산자는 주어진 객체가 특정 클래스의 인스턴스인지, 또는 프로토타입 체인 내에서 특정 클래스를 상속받는지를 확인합니다.
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
객체의 클래스 또는 상속 관계를 확인할 때 사용됩니다.
프로토타입 체인을 확인하여 해당 클래스가 존재하는지 검사합니다.
모든 JavaScript 객체는 constructor 속성을 가지고 있습니다. 이 속성은 객체를 생성할 때 사용된 생성자 함수를 참조합니다.
console.log(dog.constructor === Dog); // true
객체가 생성될 때 해당 객체의 생성자 함수를 가리킵니다.
객체의 유형을 확인할 때 유용하게 사용될 수 있습니다.
JavaScript의 상속은 코드 재사용성을 높이고, 복잡한 객체 관계를 효과적으로 관리할 수 있게 해줍니다. instanceof
와 constructor
는 객체의 생성과 상속 관계를 파악하는 데 중요한 역할을 합니다.
구분 | constructor | instanceof |
---|---|---|
정의 | 객체가 생성될 때 해당 객체를 생성한 함수를 참조합니다. | 객체가 특정 클래스의 인스턴스인지, 또는 클래스를 상속받았는지 확인합니다. |
반환값 | 해당 객체를 생성한 생성자 함수를 반환합니다. | 조건이 참이면 true , 거짓이면 false 를 반환합니다. |
사용 예시 | const obj = new MyClass(); console.log(obj.constructor); | console.log(obj instanceof MyClass); |
사용 목적 | 객체의 생성자 함수(클래스)를 알고 싶을 때 사용합니다. | 객체가 특정 클래스의 인스턴스인지, 또는 특정 클래스를 상속받는지 확인할 때 사용합니다. |
특징 | - 모든 객체는 constructor 속성을 가짐- 직접 설정 가능 | - 프로토타입 체인을 따라가며 인스턴스 여부를 확인 - 직접적으로 조작할 수 없음 |