자바스크립트 생성자 함수 (Constructor Functions)

자바스크립트에서는 생성자 함수 (Constructor Functions) 를 사용하여 객체를 생성할 수 있습니다. 생성자 함수는 일종의 템플릿이며, 해당 템플릿을 사용하여 여러 개의 동일한 속성과 메서드를 가진 객체를 생성할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 객체 지향 프로그래밍의 개념을 구현할 수 있습니다.

생성자 함수의 구조

생성자 함수는 일반 함수와 동일한 구조를 가지며, 첫 글자를 대문자로 작성합니다. 예를 들어, Person이라는 생성자 함수를 정의하려면 아래와 같이 작성할 수 있습니다.

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

위의 코드에서 nameage는 생성자 함수를 호출할 때 전달된 인자를 통해 객체의 속성을 초기화하는 역할을 합니다. this 키워드는 생성자 함수 내에서 현재 인스턴스를 참조하기 위해 사용됩니다.

객체 인스턴스 생성하기

생성자 함수를 정의한 후에는 new 키워드를 사용하여 해당 생성자 함수로부터 객체 인스턴스를 생성할 수 있습니다. 예를 들어, Person 생성자 함수로부터 john이라는 객체 인스턴스를 생성하려면 아래와 같이 작성할 수 있습니다.

const john = new Person('John', 25);

위의 코드는 Person 생성자 함수를 호출하여 name 속성에 'John' 값을, age 속성에 25 값을 가지는 john 객체 인스턴스를 생성합니다.

메서드 추가하기

생성자 함수로부터 생성된 객체 인스턴스에는 추가적으로 메서드를 추가할 수 있습니다. 이를 통해 해당 객체의 동작을 정의할 수 있습니다.

function Person(name, age) {
  this.name = name;
  this.age = age;

  this.sayHello = function() {
    console.log(`Hello, my name is ${this.name}. I am ${this.age} years old.`);
  }
}

const john = new Person('John', 25);
john.sayHello(); // Hello, my name is John. I am 25 years old.

위의 코드에서는 Person 생성자 함수에 sayHello라는 메서드를 정의하였습니다. 이 메서드는 객체 인스턴스가 호출될 때 자신의 이름과 나이를 출력하는 기능을 수행합니다.

상속 구현하기

자바스크립트의 생성자 함수를 사용하면 상속을 간단하게 구현할 수 있습니다. 생성자 함수의 prototype 속성을 활용하여 객체의 메서드를 상속하거나 확장할 수 있습니다.

function Vehicle(speed) {
  this.speed = speed;
}

Vehicle.prototype.accelerate = function() {
  console.log(`Vehicle is accelerating at ${this.speed} km/h.`);
};

function Car(speed, brand) {
  Vehicle.call(this, speed);
  this.brand = brand;
}

Car.prototype = Object.create(Vehicle.prototype);
Car.prototype.constructor = Car;

Car.prototype.honk = function() {
  console.log(`The ${this.brand} car is honking.`);
};

const myCar = new Car(100, 'Honda');
myCar.accelerate(); // Vehicle is accelerating at 100 km/h.
myCar.honk(); // The Honda car is honking.

위의 코드에서는 Vehicle이라는 생성자 함수를 정의하고, 이를 상속받아 Car이라는 생성자 함수를 정의하였습니다. Vehicle의 속성과 메서드를 Car에 상속하고, Car에 추가적인 메서드인 honk을 정의하였습니다. 이렇게 구현된 myCar 객체는 VehicleCar의 속성과 메서드를 모두 사용할 수 있습니다.

자바스크립트 생성자 함수는 객체 지향 프로그래밍 패턴을 구현하는 데에 유용한 도구입니다. 상속과 다형성 등을 활용하여 확장성과 유연성이 뛰어난 코드를 작성할 수 있습니다. 생성자 함수를 적절히 활용하면 여러 개의 객체를 쉽게 생성하고 관리할 수 있으며, 코드의 재사용성을 높일 수 있습니다.