자바스크립트는 프로토타입 기반의 객체 지향 언어로, 객체를 생성하고 상속을 구현하는 방식에는 여러 가지가 있습니다. 이 중에서 생성자와 프로토타입 체인을 사용하여 메서드를 상속하는 스타일을 알아보겠습니다.
생성자(Constructor) 함수
생성자 함수는 객체를 생성하는 데 사용되는 함수입니다. 일반적으로 생성자 함수의 이름은 대문자로 시작합니다. 생성자 함수를 호출하여 객체를 생성할 때는 new 키워드를 사용합니다.
function Person(name, age) {
this.name = name;
this.age = age;
}
var person1 = new Person('John', 25);
위 예제에서 Person 함수는 name과 age라는 두 개의 인자를 받아 객체를 생성합니다. this 키워드는 생성자 함수에서 생성되는 객체를 가리키며, 이를 통해 객체의 프로퍼티를 설정할 수 있습니다.
프로토타입 체인(Method Inheritance)
프로토타입 체인은 자바스크립트 객체의 상속 구조를 구현하는 메커니즘입니다. 객체는 자신의 프로토타입(부모 객체)을 가리키는 __proto__라는 내부 프로퍼티를 갖습니다. 이를 통해 자식 객체는 부모 객체의 메서드를 상속받을 수 있습니다.
Person.prototype.introduce = function() {
console.log('My name is', this.name, 'and I am', this.age, 'years old.');
};
person1.introduce(); // 출력: My name is John and I am 25 years old.
위 예제에서 Person.prototype.introduce 함수는 Person 생성자 함수로 생성된 모든 객체에서 공유하는 메서드입니다. 따라서 person1.introduce()를 호출하여 해당 메서드를 실행할 수 있습니다.
메서드 상속 스타일 정의 방법
메서드를 상속하기 위해서는 부모 객체의 프로토타입을 자식 객체의 프로토타입으로 설정하면 됩니다. 이를 통해 부모 객체의 메서드를 상속받을 수 있습니다.
function Teacher(name, age, subject) {
Person.call(this, name, age);
this.subject = subject;
}
Teacher.prototype = Object.create(Person.prototype);
Teacher.prototype.constructor = Teacher;
Teacher.prototype.teach = function() {
console.log('I teach', this.subject);
};
var teacher1 = new Teacher('Jane', 30, 'Math');
teacher1.introduce(); // 출력: My name is Jane and I am 30 years old.
teacher1.teach(); // 출력: I teach Math.
위 예제에서 Teacher 함수는 Person 생성자 함수의 기능을 상속받기 위해 Person.call(this, name, age)을 호출합니다. 그리고 Teacher.prototype을 Object.create(Person.prototype)으로 설정하여 프로토타입 체인을 형성합니다. 이를 통해 teacher1 객체는 Person 생성자 함수로 생성된 객체의 메서드를 상속받을 수 있습니다.
종합
자바스크립트에서 생성자와 프로토타입 체인을 사용하여 메서드 상속을 정의하는 방법을 알아보았습니다. 생성자 함수를 사용하여 객체를 생성하고, 프로토타입 체인을 통해 메서드를 상속할 수 있습니다. 이를 활용하여 객체 지향 프로그래밍에서 상속을 구현할 수 있습니다.
#javascript #prototype