자바스크립트 생성자 함수와 프로토타입 체인의 메서드 데코레이터

자바스크립트에서 클래스 기반 객체지향 프로그래밍을 구현할 때 생성자 함수와 프로토타입 체인은 중요한 개념입니다. 이번 글에서는 이러한 개념을 활용하여 메서드 데코레이터를 구현하는 방법에 대해 알아보겠습니다.

생성자 함수와 프로토타입 체인

생성자 함수는 객체를 생성하기 위한 템플릿입니다. new 키워드를 사용하여 생성자 함수를 호출하면 새로운 객체가 생성되고, 이 객체는 생성자 함수의 프로퍼티와 메서드를 상속받습니다.

프로토타입 체인은 객체의 상속 메커니즘을 구현하는 방법입니다. 생성자 함수를 통해 생성된 객체는 자체적으로 메서드를 갖지 않지만, 프로토타입 체인을 통해 생성자 함수의 프로토타입 객체에 정의된 메서드를 사용할 수 있습니다.

메서드 데코레이터

메서드 데코레이터는 메서드의 동작을 수정하거나 기능을 추가하기 위해 사용되는 패턴입니다. 메서드 데코레이터는 메서드 정의 앞에 @ 기호를 붙이고, 데코레이터 함수를 적용합니다.

class ExampleClass {
  @decorator
  exampleMethod() {
    // 메서드 내용
  }
}

위의 예시에서 @decorator가 메서드 데코레이터입니다. 이를 통해 exampleMethod의 동작을 수정하거나 기능을 추가할 수 있습니다.

메서드 데코레이터 구현하기

아래는 자바스크립트에서 메서드 데코레이터를 구현하는 코드의 간단한 예시입니다.

function logTime(target, name, descriptor) {
  const originalMethod = descriptor.value;

  descriptor.value = function (...args) {
    console.log(`Method '${name}' called at ${new Date()}`);
    return originalMethod.apply(this, args);
  };

  return descriptor;
}

class ExampleClass {
  @logTime
  exampleMethod() {
    console.log("Example method called");
  }
}

const example = new ExampleClass();
example.exampleMethod();

위의 예시에서 logTime 함수는 메서드 데코레이터로 사용됩니다. 이 함수는 데코레이터로 사용된 메서드의 실행 전후에 로그를 출력합니다.

결론

자바스크립트의 생성자 함수와 프로토타입 체인을 활용하여 메서드 데코레이터를 구현할 수 있습니다. 이를 통해 객체의 동작을 수정하거나 기능을 추가할 수 있는 강력한 패턴을 사용할 수 있습니다. 메서드 데코레이터는 코드의 재사용성과 유지 보수성을 향상시키는데 도움을 줄 수 있습니다.

#JavaScript #메서드데코레이터