자바스크립트 생성자 함수에서의 상속과 다형성의 구현 방법

자바스크립트는 프로토타입 기반의 언어로, 객체를 생성할 때 생성자 함수를 사용합니다. 생성자 함수를 통해 객체를 생성하는 경우, 상속과 다형성을 구현할 수 있습니다. 이러한 개념은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 코드의 재사용성과 유지보수성을 높일 수 있습니다.

상속 (Inheritance)

상속은 한 객체가 다른 객체의 프로퍼티와 메서드를 상속받는 것을 의미합니다. 이를 통해 코드의 중복을 줄이고, 부모 객체의 기능들을 자식 객체에서 사용할 수 있습니다. 자바스크립트에서는 prototype을 이용하여 상속을 구현할 수 있습니다.

아래는 생성자 함수를 통해 상속을 구현하는 예시입니다.

function Animal(name) {
  this.name = name;
}

Animal.prototype.sayHello = function() {
  console.log(`Hello, I'm ${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 Woof!");
};

const myDog = new Dog("Max", "Golden Retriever");
myDog.sayHello(); // Hello, I'm Max.
myDog.bark(); // Woof Woof!

위의 예시에서 Animal이라는 부모 객체를 정의하고, Dog라는 자식 객체를 만들어 상속을 받았습니다. Animal.call(this, name); 코드를 통해 부모 객체의 생성자를 호출하고, Object.create(Animal.prototype); 코드를 통해 부모 객체의 프로토타입을 자식 객체의 프로토타입으로 설정합니다. 이를 통해 Dog 객체는 Animal 객체의 메서드와 프로퍼티를 상속받을 수 있습니다.

다형성 (Polymorphism)

다형성은 같은 이름의 메서드가 다른 객체에서 다른 기능을 수행하는 것을 의미합니다. 이를 통해 객체의 타입에 따라 실행되는 메서드가 달라짐으로써, 다양한 객체를 동일한 방식으로 다룰 수 있습니다. 자바스크립트에서는 다형성을 동적 디스패치(dynamic dispatch)라는 개념을 통해 구현할 수 있습니다.

아래는 다형성을 구현하는 예시입니다.

function Animal(name) {
  this.name = name;
}

Animal.prototype.makeSound = function() {
  console.log("Animal makes a sound.");
};

function Dog(name) {
  Animal.call(this, name);
}

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

Dog.prototype.makeSound = function() {
  console.log("Dog barks.");
};

function Cat(name) {
  Animal.call(this, name);
}

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

Cat.prototype.makeSound = function() {
  console.log("Cat meows.");
};

const myDog = new Dog("Max");
const myCat = new Cat("Whiskers");

const animals = [myDog, myCat];

animals.forEach((animal) => {
  animal.makeSound();
});

위의 예시에서 Animal, Dog, Cat이라는 세 가지 객체를 정의하고, 각각 makeSound 메서드를 구현했습니다. 이후에 myDog, myCat 객체를 생성하고 배열 animals에 담아서 forEach 문을 통해 각각의 객체를 순회하면서 makeSound 메서드를 호출합니다. 결과적으로 각 객체의 타입에 따라 다른 기능이 수행되는 것을 확인할 수 있습니다.

결론

자바스크립트에서 생성자 함수를 통해 상속과 다형성을 구현하는 방법에 대해 알아보았습니다. 이러한 개념은 객체 지향 프로그래밍의 중요한 요소이며, 코드의 재사용성과 유지보수성을 높이는데 도움을 줍니다. 상속과 다형성을 적절히 활용하여 좀 더 유연하고 효율적인 코드를 작성할 수 있습니다.

#javascript #상속 #다형성