**메서드**와 this 바인딩, 콜백?? 이건 데코레이터다.

데코레이터

데코레이터 ( 혹은 데코레이터 함수) _ 참고 링크 새 함수를 반환하여 전달 된 함수 또는 메서드의 동작을 수정하는 함수이다.

( 여기서는 메서드 데코레이터만 다룰 예정이며, 직접 캐싱 로직을 구현해가면서 책에 나온 개념을 적용해보겠습니다. _또한, ts의 데코레이터 개념은 사용하지 않습니다..! )

실 사용 예시 (node 서버)

// 로깅을 하는 함수 (node.js로 서버를 만들 때 자주 사용..!)

function logDecorator(originalFunction) { // 함수를 받아서
  return function(...args) { // 새로운 함수를 반환한다. 해당 함수의 내용은..
    console.log(`Calling function with arguments: ${args}`); // 로그를 찍고, 
    const result = originalFunction.apply(this, args);//인자로 받은 함수를 실행하고
    console.log(`Function returned: ${result}`); //결과 로그를 찍고
    return result; //실행 결과를 반환한다.
  }
}

// 사용 예
function add(a, b) { //일반적인 함수
  return a + b;
}

const decoratedAdd = logDecorator(add); //logDecorator는 add 함수를 확장한다.
console.log(decoratedAdd(2, 3));  // 결과는 로그를 출력하고 5를 반환

캐싱을 구현하는 데코레이터를 만들어 가며 책의 내용 적용해보기

예시로, 엄청나게 CPU를 잡아먹는, 너무나 무겁고 오래걸리는 작업을 하는 함수가 있다고 해보자

function slow(x){
  // 어마무시하게 무거운 작업..
  console.log(`slow${x} 를 호출함`);
  return x;
}

이 함수는 자주 사용되며, 매번 사용할 때마다 오래 기다리게 되면 너무나도 유저 경험이 좋지 않을 것.

이러한 상황에서 보편적으로 캐싱을 통해서 해결하는 편이다