250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 문법 차이
- list multiplication
- SQL
- 코드 스니펫
- Oracle
- ROLLUP
- python
- sql 저장 모듈
- window 함수
- git
- JavaScript
- 뷰
- html
- coalesce
- 비절차적 데이터 조작어
- 정규식 연산
- 위코드
- show graph characteristics
- dom
- GROUPING
- dense rank
- MYSQL
- simple case expression
- execute immediate
- 정보처리기사
- Node.js
- 기업 협업
- 자료구조
- SQLD
- searched case expression
Archives
- Today
- Total
프로그래밍 숲
자바스크립트에서 여러 개의 인자를 받는 데코레이터 함수 적용하기 본문
728x90
반응형
오늘도 지난 시간에 이어서 여러 개의 인자를 받는 데코레이터(래핑) 함수에 대해서 알아보도록 하겠습니다. 예시가 조금 더 어려워져서 이해했다고 생각했던 부분이 다시 헷갈리기 시작했습니다.
let worker = {
slow(min, max) {
console.log(`slow(${min},${max})을/를 호출함`);
return min + max;
},
};
function cachingDecorator(func, hash) {
let cache = new Map();
return function () {
let key = hash(arguments); // (*)
if (cache.has(key)) {
return cache.get(key);
}
let result = func.call(this, ...arguments); // (**)
cache.set(key, result);
return result;
};
}
function hash(args) {
return args[0] + ',' + args[1];
}
worker.slow = cachingDecorator(worker.slow, hash);
console.log(worker.slow(3, 5)); // 제대로 동작합니다.
console.log('다시 호출: ' + worker.slow(3, 5)); // 동일한 결과 출력(캐시된 결과)
이것은 예시 코드입니다. 제가 헷갈렸던 부분은 또 다시 함수의 재할당 부분입니다. 다른 분들도 이 글을 보고 도움이 되었으면 좋겠습니다.
worker.slow = cachingDecorator(worker.slow, hash);
위의 함수가 재할당 된 이후에, 아래의 콘솔이 실행됩니다.
console.log(worker.slow(3, 5));
worker.slow는 분명 cachingDecorator로 재할당 됐으니 cachingDecorater(func, hash)로 인자를 받아야하는 것이 아닌가 생각했습니다. 하지만 함수만 worker.slow라는 함수만 cachingDecorater로 래핑되었을 뿐, 실제로 받는 인자는 worker.slow에 해당하는 (min, max)입니다.
cachingDecorater(func, hash)의 hash는 새로 정의된 함수
function hash(args) {
return args[0] + ',' + args[1];
}
여기에서 가져온 함수의 이름 hash가 들어가게 되는 것입니다. 저번에도 살펴보았듯이, 자바스크립트는 함수의 이름을 바로 변수로 사용할 수 있기 때문입니다.
728x90
반응형
'프로그래밍_인포 > Javascript' 카테고리의 다른 글
JavaScript | Array.prototype이 뭔가요? (0) | 2023.08.10 |
---|---|
Javascript | Number와 parseInt의 차이 (0) | 2023.08.10 |
func.call을 활용해 this undefind 해결하기 (0) | 2023.06.24 |
자바스크립트 데코레이터와 캐싱: 함수 호출 결과 캐시 예제 분석 (0) | 2023.06.23 |
자바스크립트의 Window 객체: 전역 객체, 문서 객체 모델(DOM), 브라우저 객체 모델(BOM)이란? (0) | 2023.05.23 |
Comments