자바스크립트 프로토타입 상속 (Prototype Inheritance)

자바스크립트는 프로토타입 기반 언어로, 상속을 구현하기 위해 프로토타입 상속(Prototype Inheritance)을 사용합니다. 이것은 객체지향 프로그래밍에서 객체 간의 관계를 정의하는 방법 중 하나입니다. 프로토타입 상속을 이해하는 것은 자바스크립트 개발자로서 중요한 요소입니다.

프로토타입 이해하기

프로토타입은 객체간에 공유되는 템플릿이라고 생각할 수 있습니다. 자바스크립트에서 모든 객체는 “프로토타입”이라고 불리는 다른 객체에 대한 참조를 가지고 있습니다. 이러한 프로토타입 체인을 통해 객체가 다른 객체의 프로퍼티와 메소드를 상속받을 수 있습니다.

// 프로토타입 객체 생성
let animal = {
  isAlive: true,
  eat: function() {
    console.log("Eating...");
  }
};

// 새로운 객체 생성 및 상속
let dog = Object.create(animal);
dog.bark = function() {
  console.log("Woof Woof!");
};

// 프로퍼티와 메소드 상속 확인
console.log(dog.isAlive); // true
dog.eat(); // Eating...
dog.bark(); // Woof Woof!

위의 예제에서 animal 객체는 isAlive 프로퍼티와 eat 메소드를 가지고 있습니다. dog 객체는 animal 객체를 프로토타입으로 갖고 있으며, 따라서 isAliveeat를 상속받습니다. 또한 dog 객체에는 bark 메소드가 추가되어 있습니다.

프로토타입 상속 활용하기

프로토타입 상속을 사용하면 코드를 재사용하고 객체 간에 계층 구조를 정의할 수 있습니다. 이를 통해 코드의 유지 보수성을 높일 수 있고, 객체지향 프로그래밍의 기능을 자바스크립트에서도 구현할 수 있습니다.

// 부모 클래스 생성
function Animal() {
  this.isAlive = true;
}

Animal.prototype.eat = function() {
  console.log("Eating...");
};

// 자식 클래스 생성
function Dog() {
  this.breed = "unknown";
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.bark = function() {
  console.log("Woof Woof!");
};

// 객체 생성 및 상속 확인
let myDog = new Dog();
console.log(myDog.isAlive); // true
myDog.eat(); // Eating...
myDog.bark(); // Woof Woof!

위의 예제에서 Animal 클래스는 isAlive 프로퍼티와 eat 메소드를 정의합니다. Dog 클래스는 Animal 클래스를 상속받아 breed 프로퍼티와 bark 메소드를 추가합니다. Dog 클래스의 객체는 isAlive, eat, bark를 모두 상속받아 사용할 수 있습니다.

결론

자바스크립트의 프로토타입 상속을 이해하면 객체지향 프로그래밍에서의 상속 개념을 자바스크립트에서도 구현할 수 있습니다. 이를 통해 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다. 프로토타입 상속은 자바스크립트 개발자에게 중요한 개념이므로 꼭 익혀두시기 바랍니다.