프로토타입을 이용한 메소드 오버라이딩
자바스크립트에서는 프로토타입을 이용하여 메소드 오버라이딩을 할 수 있습니다. 메소드 오버라이딩은 상위 클래스에 정의된 메소드를 하위 클래스에서 재정의하여 사용하는 것을 의미합니다.
프로토타입 상속과 메소드 오버라이딩
프로토타입은 자바스크립트에서 상속을 구현하는 방법 중 하나입니다. 프로토타입 체인을 통해 하위 클래스는 상위 클래스의 프로퍼티와 메소드를 상속받을 수 있습니다. 하지만 프로토타입 체인을 사용하여 상속받은 메소드를 직접 수정하면, 모든 하위 클래스에 영향을 줄 수 있습니다.
이런 상황에서 프로토타입을 이용하여 메소드 오버라이딩을 할 수 있습니다. 메소드 오버라이딩은 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 것으로, 프로토타입을 이용하면 하위 클래스에서 원하는 동작을 직접 구현할 수 있습니다.
메소드 오버라이딩 예제
// 상위 클래스
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 [색상]”을 출력하도록 하였습니다.