
선요약 > 서로 비슷한 목적을 가지고 있지만 언어와 프레임워크에 따라 구현과 이름이 다름
// JS
function log(target, key, descriptor) {
const origin = descriptor.value;
descriptor.value = function(...args) {
console.log(`[${target}.${key}]`);
console.log(`매개변수: ${JSON.stringify(args)}`);
const result = origin.apply(this, args);
console.log(`${key} 호출 결과: ${JSON.stringify(result)}`);
return result;
}
return descriptor;
}
class Calculator {
@log
add(a, b) {
return a + b;
}
}
const calc = new Calculator();
calc.add(2, 3);
//output
[Calculator.add]
매개변수: [2,3]
add 호출 결과: 5
@Override @Deprecated @NotNull//java
public class Person {
@NotNull
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
데코레이터와 어노테이션은 메타데이터를 추가하거나 기능을 추가하거나 수정해서 코드의 가독성과 유지 보수성을 향상시킨다는 면에서는 비슷하지만 사용 중인 프로그래밍 언어나 프레임워크에 따라 구현과 이름이 다를 수 있습니다.