[JavaScript] 상속(클래스 기반의 객체지향 언어와 다름)

전주은·2022년 12월 1일
0
post-thumbnail

✔ 자바스크립트의 상속

- 자바스크립트는 프로토타입 기반의 객체 지향 언어(클래스 기반의 객체지향 언어와 다름)
- 현재 존재하고 있는 객체의 프로토타입을 사용하여 해당 객체를 복사하고 재사용하는 것 이다.
- JavaScript에서는 상속을 위해 프로토타입 체인(prototype chain)이라는 개념을 사용한다. 모든 객체는 프로토타입(prototype)이라는 속성을 가지며, 이 프로토타입은 또 다른 객체를 참조한다. 이렇게 연결된 객체들의 체인을 프로토타입 체인이라고 한다.

✔ 프로토 타입(prototype)

  • 모든 객체는 프로토타입이라는 객체를 가지고 있다
    // 참조변수 프로퍼티1프로퍼티2...메소드 +프로토타입(형태)
    // [ ] -->[ ][ ].....[ ][ ]
  • 모든 객체는 프로토타입으로부터 프로퍼티와 프로퍼티 메소드를 상속받음
  • 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며 상속된느 정보를 제공하는 객체를 프로토타입이라고 함
    const dog = new Dog(); //Dog.prototype이라는 것을 상속받아 dog를 생성
    //자바의 Object객체처럼 모든객체는 Object.prototype을 상속받음

상속을 구현하는 방법

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(); // "My name is Max"
myDog.bark(); // "Woof!"

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();
    }
}

0개의 댓글