자바스크립트에서 생성자 메서드(constructor method)는 클래스 내부에서 객체를 생성하고 초기화하는 특별한 메서드입니다. 클래스를 통해 새로운 인스턴스를 만들 때 new 키워드와 함께 자동으로 호출되며, 객체의 초기 상태를 설정하는 역할을 담당합니다.
생성자 메서드의 기본 규칙
생성자 메서드를 사용할 때는 다음 두 가지 규칙을 반드시 기억해야 합니다.
- 클래스에 생성자 메서드를 정의하지 않으면, 자바스크립트가 자동으로 기본 생성자(default constructor)를 제공합니다.
- 하나의 클래스에는 생성자 메서드가 단 하나만 존재할 수 있습니다. 두 개 이상 선언하면
SyntaxError가 발생합니다.
상속 관계에서의 super() 호출
부모 클래스를 상속받는 자식 클래스에서 생성자를 사용하려면, 반드시 this에 접근하기 전에 super()를 호출해야 합니다. super()는 부모 클래스의 생성자를 실행하여 상속받은 속성들을 올바르게 초기화해 줍니다.
예제 코드
아래 예제를 직접 실행해 보면 생성자 메서드가 어떻게 동작하는지 확인할 수 있습니다.
<html>
<body>
<script>
class Department {
constructor() {
this.name = "Department";
}
}
class Employee extends Department {
constructor() {
super();
}
}
class Company {}
Object.setPrototypeOf(Employee.prototype, Company.prototype);
document.write("<br>"+Object.getPrototypeOf(Employee.prototype) === Department.prototype);
let myInstance = new Employee();
document.write("<br>"+myInstance.name);
</script>
</body>
</html>코드 설명
- Department 클래스: 생성자 메서드 안에서
this.name에 "Department"라는 값을 할당하여 객체를 초기화합니다. - Employee 클래스:
extends로 Department를 상속받으며, 생성자 내부에서super()를 호출해 부모 클래스의 초기화 로직을 실행합니다. - Company 클래스: 별도의 생성자 없이 정의되었으므로 기본 생성자가 자동으로 적용됩니다.
- setPrototypeOf / getPrototypeOf: 프로토타입 체인을 조작하고 확인하여, 상속 구조가 의도대로 설정되었는지 검증합니다.
이 코드를 실행하면 myInstance.name이 "Department"로 출력됩니다. 이는 자식 클래스의 인스턴스가 부모 클래스의 생성자를 통해 올바르게 초기화되었음을 보여줍니다.
정리
생성자 메서드는 클래스 기반 프로그래밍의 핵심 요소로, 객체 생성 시점에 필요한 속성을 설정하고 초기화 작업을 수행합니다. 클래스당 하나만 정의할 수 있고, 상속 시에는 super() 호출이 필수라는 점만 기억하면 됩니다.