[javascript] 프로토타입으로 메소드와 프로퍼티 공유하기

자바스크립트에서는 프로토타입 기반 상속을 통해 객체들 간에 메소드와 프로퍼티를 공유할 수 있습니다. 이를 통해 중복을 최소화하고 유지보수성을 향상시킬 수 있습니다. 이번 포스트에서는 프로토타입을 이용하여 메소드와 프로퍼티를 공유하는 방법에 대해 알아보겠습니다.

프로토타입 기반 상속

자바스크립트에서의 모든 객체는 다른 객체로부터 상속됩니다. 이때, 상속의 원본이 되는 객체를 프로토타입이라고 합니다. 자바스크립트는 프로토타입 체인을 통해 객체 간의 상속을 처리합니다.

예를 들어, 다음과 같이 Person이라는 객체를 생성하고, 이를 상속받아 Student라는 객체를 만들어보겠습니다.

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

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}.`);
};

function Student(name, school) {
  Person.call(this, name); // 부모 객체의 생성자 호출
  this.school = school;
}

Student.prototype = Object.create(Person.prototype);

const student1 = new Student('Alice', 'ABC School');
student1.greet(); // Hello, my name is Alice.

위 예제에서 Student 객체는 Person 객체를 상속받고 있습니다. 이때 Student 객체의 프로토타입은 Person 객체의 프로토타입을 상속받도록 설정했습니다.

메소드와 프로퍼티 공유하기

프로토타입을 이용하면, 상속받은 모든 객체들이 프로토타입의 메소드와 프로퍼티를 공유합니다. 이를 통해 중복을 방지하고 메모리를 절약할 수 있습니다.

만약 상속받은 객체의 프로토타입에 존재하지 않는 메소드나 프로퍼티를 호출하게 되면, 자바스크립트는 이를 프로토타입 체인을 따라 올라가면서 찾게 됩니다. 이를 통해 상속 관계에서 메소드와 프로퍼티를 공유할 수 있습니다.

function Employee(name, position) {
  this.name = name;
  this.position = position;
}

Employee.prototype.introduce = function() {
  console.log(`Hi, I'm ${this.name} and I'm a ${this.position}.`);
};

function Manager(name, position, department) {
  Employee.call(this, name, position);
  this.department = department;
}

Manager.prototype = Object.create(Employee.prototype);

const manager1 = new Manager('Bob', 'Manager', 'Sales');
manager1.introduce(); // Hi, I'm Bob and I'm a Manager.

위 예제에서 Manager 객체는 Employee 객체를 상속받고 있습니다. 따라서 Manager 객체에서 introduce 메소드를 호출할 수 있습니다.

프로토타입 기반 상속을 이용하여 메소드와 프로퍼티를 공유함으로써 코드의 재사용성을 높일 수 있고, 유지보수성을 향상시킬 수 있습니다.

결론

프로토타입 기반 상속을 이용하여 객체들 간에 메소드와 프로퍼티를 공유할 수 있습니다. 이를 통해 중복을 최소화하고 유지보수성을 향상시킬 수 있습니다.

프로토타입은 자바스크립트의 강력한 기능 중 하나이며, 적절히 활용함으로써 더 효율적이고 유지보수 가능한 코드를 작성할 수 있습니다.

참고 자료:

이상으로 프로토타입을 이용하여 메소드와 프로퍼티를 공유하는 방법에 대해 알아보았습니다. 계속해서 자바스크립트의 기초적이고 중요한 개념을 살펴보고, 이를 통해 더 나은 코드를 작성하는 방법에 대해 배워보겠습니다.