프로토타입을 이용한 메소드 오버라이딩

자바스크립트에서는 프로토타입을 이용하여 메소드 오버라이딩을 할 수 있습니다. 메소드 오버라이딩은 상위 클래스에 정의된 메소드를 하위 클래스에서 재정의하여 사용하는 것을 의미합니다.

프로토타입 상속과 메소드 오버라이딩

프로토타입은 자바스크립트에서 상속을 구현하는 방법 중 하나입니다. 프로토타입 체인을 통해 하위 클래스는 상위 클래스의 프로퍼티와 메소드를 상속받을 수 있습니다. 하지만 프로토타입 체인을 사용하여 상속받은 메소드를 직접 수정하면, 모든 하위 클래스에 영향을 줄 수 있습니다.

이런 상황에서 프로토타입을 이용하여 메소드 오버라이딩을 할 수 있습니다. 메소드 오버라이딩은 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 것으로, 프로토타입을 이용하면 하위 클래스에서 원하는 동작을 직접 구현할 수 있습니다.

메소드 오버라이딩 예제

// 상위 클래스
function Animal(name) {
  this.name = name;
}

Animal.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}`);
};

// 하위 클래스
function Cat(name, color) {
  Animal.call(this, name);
  this.color = color;
}

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

// 메소드 오버라이딩
Cat.prototype.sayHello = function() {
  console.log(`Meow, my name is ${this.name}, and I am ${this.color}`);
};

// 인스턴스 생성
let cat = new Cat("Mimi", "black");

// 상위 클래스의 sayHello 메소드 호출
cat.sayHello(); 
// 출력: "Meow, my name is Mimi, and I am black"

위 예제에서 Animal 클래스는 sayHello 메소드를 가지고 있습니다. 이 메소드는 “Hello, my name is [동물 이름]”을 출력합니다. Cat 클래스는 Animal 클래스를 상속받고, sayHello 메소드를 오버라이딩하여 “Meow, my name is [고양이 이름], and I am [색상]”을 출력하도록 하였습니다.

참고 자료