자바스크립트는 프로토타입 기반의 객체 지향 언어로, 객체를 생성하고 상속을 구현하는 방식에는 여러 가지가 있습니다. 이 중에서 생성자와 프로토타입 체인을 사용하여 메서드를 상속하는 스타일을 알아보겠습니다.
생성자(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