자바스크립트 생성자와 프로토타입 체인의 메서드 다형성 구현 예시
자바스크립트는 객체 지향 프로그래밍 언어로서, 생성자와 프로토타입 체인을 이용하여 메서드 다형성을 구현할 수 있습니다. 메서드 다형성은 같은 이름의 메서드를 다양한 객체 유형에서 다르게 처리하는 개념입니다. 이는 코드의 유지 보수성을 높이고 중복 코드를 줄일 수 있는 장점을 제공합니다.
다음은 자바스크립트 생성자와 프로토타입 체인을 활용하여 메서드 다형성을 구현하는 예시 코드입니다.
// 동물 생성자 함수
function Animal(name) {
this.name = name;
}
// 동물의 공통 메서드 추가
Animal.prototype.eat = function() {
console.log(this.name + "이(가) 먹이를 먹습니다.");
};
// 포유류 생성자 함수
function Mammal(name) {
Animal.call(this, name);
}
// 포유류 객체의 프로토타입을 동물 객체로 설정
Mammal.prototype = Object.create(Animal.prototype);
Mammal.prototype.constructor = Mammal;
// 포유류의 eat 메서드 오버라이딩
Mammal.prototype.eat = function() {
console.log(this.name + "이(가) 먹이를 먹고 소리를 냅니다.");
};
// 양서류 생성자 함수
function Amphibian(name) {
Animal.call(this, name);
}
// 양서류 객체의 프로토타입을 동물 객체로 설정
Amphibian.prototype = Object.create(Animal.prototype);
Amphibian.prototype.constructor = Amphibian;
// 양서류의 eat 메서드 오버라이딩
Amphibian.prototype.eat = function() {
console.log(this.name + "이(가) 먹이를 먹고 물 속에서 움직입니다.");
};
// 객체 생성
const lion = new Mammal("사자");
const frog = new Amphibian("개구리");
// 다형성을 이용한 메서드 호출
lion.eat(); // "사자이(가) 먹이를 먹고 소리를 냅니다."
frog.eat(); // "개구리이(가) 먹이를 먹고 물 속에서 움직입니다."
위 예시 코드에서는 Animal 생성자 함수를 정의하고, eat 메서드를 해당 생성자 함수의 프로토타입에 추가했습니다. 이후 Mammal과 Amphibian 생성자 함수를 정의하고, 각 객체의 프로토타입을 Animal 객체로 설정하였습니다. 마지막으로, Mammal과 Amphibian 객체에서는 eat 메서드를 재정의하여 다양한 동작을 수행하도록 구현하였습니다.
이와 같이 생성자와 프로토타입 체인을 이용하여 메서드 다형성을 구현하면, 객체 간의 관계를 효율적인 방법으로 구성할 수 있으며, 유지 보수성과 코드의 재사용성이 향상될 수 있습니다.
#JavaScript #프로토타입체인