본문 바로가기
javaScript

클래스 상속 프로토 타입 vs Class 문법

by mooyou 2024. 1. 1.
728x90
300x250

 

프로토타입 방식

// 부모 생성자 함수
function Parent(name) {
  this.name = name;
}

// 부모의 프로토타입에 메서드 추가
Parent.prototype.greet = function() {
  console.log(`Hello, ${this.name}!`);
};

// 자식 생성자 함수
function Child(name, toy) {
  // 부모 생성자 호출 및 속성 상속
  Parent.call(this, name); // Parent함수를 this와 함께 호출 name을 매개변수로 넘김
  this.toy = toy;
}

// 프로토타입 체인을 통한 상속 설정
Child.prototype = Object.create(Parent.prototype); //Parent.prototype을 상속받는 새로운 객체를 생성한다.

// 자식의 프로토타입에 메서드 추가 (오버라이딩)
Child.prototype.play = function() {
  console.log(`${this.name} is playing with ${this.toy}.`);
};

// 사용 예시
const myChild = new Child('Johnny', 'blocks');
myChild.greet(); // Hello, Johnny!
myChild.play();  // Johnny is playing with blocks.

 

Class 문법

// 부모 클래스
class Parent {
  constructor(name) { //constructor메서드 정의
    this.name = name;
  }

  greet() { //greet메서드 정의
    console.log(`Hello, ${this.name}!`);
  }
}

// 자식 클래스
class Child extends Parent { //Child클래스가 Parent클래스를 상속
  constructor(name, toy) {
    // 부모 클래스의 생성자 호출 및 속성 상속
    super(name);
    this.toy = toy;
  }

  // 자식 클래스의 메서드 추가
  play() {
    console.log(`${this.name} is playing with ${this.toy}.`);
  }
}

// 사용 예시
const myChild = new Child('Johnny', 'blocks');
myChild.greet(); // Hello, Johnny!
myChild.play();  // Johnny is playing with blocks.

 

부모 클래스와 자식 클래스를 생성하고 부모 클래스의 메서드를 상속받아 사용하는 것을 보여준다.

ES6(ES2015)부터 class 키워드를 통해 클래스를 정의 할 수 있게 되었다.

클래스 문법은 프로토타입 방식을 좀 더 간결하게 사용할 수 있도록 해준다. 클래스 문법은 내부적으로 프로토타입을 사용하며, 생성자 함수, 프로토타입 메서드, 크랠스 상속을 더 직관적으로 정의할 수 있게 해준다.

클래스 문법은 가독성을 향상시키고 더 편리한 문법을 제공한다. 하지만 클래스 문법은 기본적으로는 프로토타입을 기반으로 하기 때문에 클래스 문법을 사용하더라도 내부적으로는 프로토타입이 동작하고 있다.

 

 

728x90
반응형

'javaScript' 카테고리의 다른 글

layerpopup select - 비공개  (0) 2024.01.05
JS 상속 기능을 사용하는 이유  (1) 2024.01.03
.call() 메서드  (0) 2023.12.27
Object.create()  (0) 2023.12.25
js에서 클래스 상속  (0) 2023.12.19

댓글