✔ 자바스크립트의 상속
- 자바스크립트는 프로토타입 기반의 객체 지향 언어(클래스 기반의 객체지향 언어와 다름)
- 현재 존재하고 있는 객체의 프로토타입을 사용하여 해당 객체를 복사하고 재사용하는 것 이다.
- JavaScript에서는 상속을 위해 프로토타입 체인(prototype chain)이라는 개념을 사용한다. 모든 객체는 프로토타입(prototype)이라는 속성을 가지며, 이 프로토타입은 또 다른 객체를 참조한다. 이렇게 연결된 객체들의 체인을 프로토타입 체인이라고 한다.
✔ 프로토 타입(prototype)
- 모든 객체는 프로토타입이라는 객체를 가지고 있다
// 참조변수 프로퍼티1프로퍼티2...메소드 +프로토타입(형태)
// [ ] -->[ ][ ].....[ ][ ]
- 모든 객체는 프로토타입으로부터 프로퍼티와 프로퍼티 메소드를 상속받음
- 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 상속된느 정보를 제공하는 객체를 프로토타입이라고 함
const dog = new Dog();
상속을 구현하는 방법
1.프로토타입 상속
- 프로토타입 체인을 이용하여 상속을 구현하는 방법
- 자식 클래스의 프로토타입을 부모 클래스의 인스턴스로 설정하여 부모 클래스의 속성과 메서드를 상속받을 수 있다.
function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
console.log('My name is ' + this.name);
};
function Dog(name, breed) {
Animal.call(this, name);
this.breed = breed;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {
console.log('Woof!');
};
var myDog = new Dog('Max', 'Poodle');
myDog.sayName();
myDog.bark();
2. 클래스 상속
- ES6부터는 클래스 문법이 추가되어 클래스를 통해 상속을 구현할 수 있다.
- 클래스 상속은 프로토타입 체인을 이용하는 것과 비슷하지만 문법이 더 간결한다.
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
public void move() {
System.out.println("Animal is moving");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.setName("Buddy");
System.out.println(myDog.name);
myDog.move();
myDog.bark();
}
}