Dev/notion
데코레이터(Decorator)?
괴발짜응
2025. 4. 3. 23:58
반응형
클래스 기반 프로그래밍에서 특정 기능을 "주석처럼" 붙여서 확장하거나 수정하는 문법으로, 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처럼 클래스 기반 프레임워크에서 주로 사용한다.
반응형