자바스크립트 생성자 함수와 프로토타입 체인의 메서드 오버로딩 설명

자바스크립트는 프로토타입 기반의 객체지향 프로그래밍 언어로, 여러 개의 객체를 생성할 때 생성자 함수를 사용합니다. 생성자 함수를 사용하면 동일한 속성과 메서드를 가진 객체들을 간편하게 생성할 수 있습니다.

하지만 때로는 동일한 메서드 이름을 가진 생성자 함수를 사용해야 하는 경우가 있습니다. 이럴 때 메서드 오버로딩을 사용할 수 있습니다.

메서드 오버로딩

메서드 오버로딩은 동일한 이름의 메서드를 다양한 매개변수로 호출할 수 있는 기능입니다. 즉, 같은 이름의 메서드가 여러 개 존재하면 파라미터에 따라 실행되는 메서드가 달라집니다.

하지만 자바스크립트는 메서드 오버로딩을 공식적으로 지원하지 않습니다. 자바스크립트는 동적인 언어이기 때문에 함수 호출 시 인자의 개수나 타입에 제한이 없습니다. 따라서 오버로딩과 비슷한 효과를 낼 수 있습니다.

프로토타입 체인을 이용한 메서드 오버로딩

자바스크립트에서는 프로토타입 체인을 이용하여 메서드 오버로딩을 구현할 수 있습니다. 여러 개의 객체를 생성할 때, 다양한 파라미터를 받아 메서드를 실행할 수 있는 생성자 함수를 만들어봅시다.

function Car(brand, model) {
  this.brand = brand;
  this.model = model;
}

Car.prototype.start = function() {
  console.log(`Starting ${this.brand} ${this.model}...`);
}

Car.prototype.stop = function() {
  console.log(`Stopping ${this.brand} ${this.model}...`);
}

Car.prototype.honk = function() {
  console.log(`Honking ${this.brand} ${this.model}...`);
}

var myCar = new Car("Tesla", "Model 3");
myCar.start();
myCar.stop();
myCar.honk();

위 예제에서는 Car 생성자 함수를 이용하여 myCar 객체를 생성합니다. start, stop, honk 메서드를 프로토타입에 추가하고, 이를 이용하여 생성한 객체에서 호출할 수 있습니다.

메서드의 이름은 동일하지만, 매개변수의 개수나 타입이 다른 경우에는 다른 메서드로 간주됩니다.

Car.prototype.stop = function(duration) {
  console.log(`Stopping ${this.brand} ${this.model} for ${duration} seconds...`);
}

위와 같이 stop 메서드를 추가하면, 호출할 때 인자로 지정된 duration 값을 활용하여 다른 로직을 수행할 수 있습니다.

결론

자바스크립트에서는 공식적으로 메서드 오버로딩을 지원하지 않지만, 프로토타입 체인을 이용하여 비슷한 효과를 낼 수 있습니다. 생성자 함수와 프로토타입을 적절히 활용하여 동일한 이름의 메서드에 다양한 파라미터를 전달할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 간편하게 객체를 생성할 수 있습니다.

#JavaScript #메서드오버로딩