Nest에서는 데커레이터(decorator)를 적극 활용한다. 데커레이터를 잘 활용하면 횡단 관심사를 분리하여 관점 지향 프로그래밍을 적용한 코드를 작성할 수 있다고 하는데 아직까지는 잘 와닿지 않으니 어떤 것인지 한번 알아보자.
우선 데커레이터는 요소의 선언부 앞에 @로 시작한다.
데커레이터를 선언할 경우에는 데커레이터로 구현된 코드를 함께 실행한다.
class CreateUserDto {
...
@IsEmail()
@MaxLength(60)
readonly email: string;
...
}
위와 같이 선언하는 경우에는 email의 조건에 string 뿐만이 아니라 이메일 형식이어야 하고( `@IsEmail()` ), 최대 길이가 60자 이하이어야 하는 것( `@MaxLength(60)` )이 추가가 된다.
만약 데커레이터에 인수를 넘겨 조작을 하고 싶다면 데커레이터 팩토리(decorator factory), 즉 데커레이터를 리턴하는 함수를 작성하면 된다.
(예시)
function deco(value: string) {
...
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
...
};
};
데커레이터는 기본적으로 다음과 같은 단계로 실행된다.
- 각 데커레이터 표현은 위에서 아래로 평가된다.
- 결과는 아래에서 위로 함수로 호출된다.
그래서 이런식으로 사용할 수 있다
class ExampleClass {
...
@f()
@g()
test(){
...
}
}
타입스크립트가 지원하는 데커레이터에는 아래와 같이 5가지가 있다.
- Class 데커레이터
- Method 데커레이터
- Accessor 데커레이터
- Property 데커레이터
- Parameter 데커레이터
데커레이터 각각에 대한 것은 다음 포스트부터!
이 포스트는 위 책을 기반으로 작성하고 있습니다...