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