자바스크립트 생성자와 프로토타입 체인의 메서드 다형성 구현 예시

자바스크립트는 객체 지향 프로그래밍 언어로서, 생성자와 프로토타입 체인을 이용하여 메서드 다형성을 구현할 수 있습니다. 메서드 다형성은 같은 이름의 메서드를 다양한 객체 유형에서 다르게 처리하는 개념입니다. 이는 코드의 유지 보수성을 높이고 중복 코드를 줄일 수 있는 장점을 제공합니다.

다음은 자바스크립트 생성자와 프로토타입 체인을 활용하여 메서드 다형성을 구현하는 예시 코드입니다.

// 동물 생성자 함수
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 메서드를 해당 생성자 함수의 프로토타입에 추가했습니다. 이후 MammalAmphibian 생성자 함수를 정의하고, 각 객체의 프로토타입을 Animal 객체로 설정하였습니다. 마지막으로, MammalAmphibian 객체에서는 eat 메서드를 재정의하여 다양한 동작을 수행하도록 구현하였습니다.

이와 같이 생성자와 프로토타입 체인을 이용하여 메서드 다형성을 구현하면, 객체 간의 관계를 효율적인 방법으로 구성할 수 있으며, 유지 보수성과 코드의 재사용성이 향상될 수 있습니다.

#JavaScript #프로토타입체인