생성자(Constructor)는 객체 지향 프로그래밍에서 특정 클래스의 인스턴스를 생성할 때 호출되는 특별한 메서드이다. 이 메서드는 주로 객체의 초기 상태를 설정하는 데 사용된다.
JavaScript에서 생성자 함수는 대문자로 시작하는 관례가 있으며, new 키워드와 함께 사용하여 인스턴스를 생성한다.
function Person(name, age) {
this.name = name;
this.age = age;
}
let john = new Person("John", 30);
console.log(john.name); // "John"
console.log(john.age); // 30
위 코드에서 Person은 생성자 함수이다. new Person("John", 30)을 호출하면 Person의 새 인스턴스가 만들어지고, 그 인스턴스의 name과 age 프로퍼티가 초기화된다.
ES6부터 클래스 문법이 도입되면서, 보다 명확하게 생성자를 정의할 수 있게 되었다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
let john = new Person("John", 30);
console.log(john.name); // "John"
console.log(john.age); // 30
Person 클래스의 새 인스턴스를 만들 때 constructor 내부의 코드가 실행되어 해당 객체의 초기 상태를 설정한다.
만약에 위의 코드처럼 Person 클래스를 생성했고
let john = new Person("John", 30, 555);
이런식으로 생성자 함수에서 요구하는 매개변수의 숫자보다 더 많은 인수를 제공하면 어떻게 될까?
정답은 초과된 인수는 단순히 무시된다. name에는 John, age에는 30으로 할당되지만 555는 어디에도 할당되지않고 무시된다!