데코레이터와 어노테이션

Soohyeok Kim·2023년 3월 26일
post-thumbnail

선요약 > 서로 비슷한 목적을 가지고 있지만 언어와 프레임워크에 따라 구현과 이름이 다름

데코레이터

  • 파이썬, JS 및 TS에서 사용되는 용어
  • 함수 또는 클래스의 동작을 직접 확장하거나 수정 가능 (어노테이션보다 살짝 더 유연함)
  • @ 기호를 사용하여 정의
// 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

어노테이션

  • 자바, 코틀린, 스위프트, C# 등에서 사용되는 용어
  • 컴파일러, 프레임워크 또는 라이브러리가 코드를 처리하기 위해 참조할 수 있는 추가 메타데이터를 제공 ex) @Override @Deprecated @NotNull
  • 함수 또는 클래스의 동작을 직접 수정하거나 래핑하지는 못함
  • @ 기호를 사용하여 정의
//java
public class Person {
  @NotNull
  private String name;
  
  public Person(String name) {
    this.name = name;
  }
  
  public String getName() {
    return name;
  }
}

그렇구나 ㅎㅎ

데코레이터와 어노테이션은 메타데이터를 추가하거나 기능을 추가하거나 수정해서 코드의 가독성유지 보수성을 향상시킨다는 면에서는 비슷하지만 사용 중인 프로그래밍 언어나 프레임워크에 따라 구현과 이름이 다를 수 있습니다.

profile
백엔드 개발자

0개의 댓글