1. 프로토타입(Prototype) 메서드 오버라이드


JavaScript는 프로토타입 기반이므로, 어떤 생성자 함수(또는 클래스)에서 정의된 메서드를 재정의하려면 해당 객체의 프로토타입에 접근해 동일한 이름으로 메서드를 다시 정의할 수 있다.

function Person(name) {
  this.name = name;
}

// 프로토타입 메서드 정의
Person.prototype.greet = function () {
  console.log(`Hello, I'm ${this.name}`);
};

const alice = new Person("Alice");
alice.greet(); // "Hello, I'm Alice"

// 프로토타입 메서드 오버라이드
Person.prototype.greet = function () {
  console.log(`Hi, my name is ${this.name}!`);
};

const bob = new Person("Bob");
bob.greet();    // "Hi, my name is Bob!"
alice.greet();  // "Hi, my name is Alice!"

2. ES6 클래스(Classes)에서의 메서드 오버라이드


ECMAScript 2015(ES6)부터 JavaScript에 클래스 문법이 추가되었으며, ES6 클래스는 프로토타입을 좀 더 직관적으로 사용할 수 있게 해준다. 클래스 상속 시, 부모 클래스(슈퍼클래스)의 메서드를 자식 클래스(서브클래스)에서 동일한 메서드 이름으로 다시 정의하면 사실상 오버라이드가 일어난다.

class Animal {
  speak() {
    console.log("동물이 소리를 냅니다.");
  }
}

class Dog extends Animal {
  // 메서드 오버라이드
  speak() {
    console.log("강아지가 멍멍 짖습니다.");
  }
}

const dog = new Dog();
dog.speak(); // "강아지가 멍멍 짖습니다."