본문 바로가기
Dev/notion

데코레이터(Decorator)?

by 괴발짜응 2025. 4. 3.
반응형

클래스 기반 프로그래밍에서 특정 기능을 "주석처럼" 붙여서 확장하거나 수정하는 문법으로, TypeScript, NestJS, Python, Java 같은 언어에서 자주 사용되며, 메타 프로그래밍의 한 형태라고 볼 수 있다.


데코레이터란?
함수나 클래스, 메서드, 속성 등에 메타데이터를 부여하거나 동작을 변경할 수 있는 특수한 문법입니다.
  • @ 기호로 시작한다.
  • 컴파일러 / 프레임워크가 이 데코레이터를 읽고 자동으로 동작을 수행함
  • 코드의 의도를 명확히 하고, 반복을 줄이는 장점이 있다.

TypeScript / NestJS 기준

1. 클래스 데코레이터

@Controller('users') // 이 클래스는 '/users' 경로의 컨트롤러임을 의미
export class UserController {}

 

2. 메서드 데코레이터

@Get() // GET /users 요청을 처리하는 핸들러
getAllUsers() {
  return this.userService.findAll();
}

 

3. 파라미터 데코레이터

@Get(':id')
getUser(@Param('id') id: string) {
  return this.userService.findOne(id);
}

 

4. 속성 데코레이터 (예: 클래스 변수)

class MyService {
  @Inject(UserRepository)
  private readonly repo: UserRepository;
}

 


데코레이터의 장점

  • 코드의 의도가 명확해짐 (어떤 함수가 어떤 역할을 하는지)
  • 공통 기능을 재사용하고 추상화 가능
  • 의존성 주입과 메타 프로그래밍이 쉬워짐
  • 프레임워크의 설정을 코드에 선언적으로 표현 가능

주의사항

  • 데코레이터는 TypeScript에서 experimentalDecorators를 true로 설정해야 사용할 수 있다. (tsconfig.json)
  • Express에는 기본적으로 데코레이터가 없고, NestJS처럼 클래스 기반 프레임워크에서 주로 사용한다.
반응형