재학습/NestJS

[NestJS] [데코레이터] 메서드 데코레이터

재삉 2023. 6. 19. 18:31
반응형

메서드 데코레이터

  • 메서드 바로 앞에 선언
  • 메서드의 속성 설명자(Property Descriptor)에 적용된다.
  • 메서드의 정의를 읽거나 수정할 수 있다.
  • 선언파일, 오버로드메소드, 선언클래스에는 사용할 수 없다.

 

메서드속성설명자(Property Descriptor)란?

객체속성의 특성을 기술한다.

(속성의 정의를 수정할수있는지 여부, 열거형인지 여부, 속성 값, 수정가능여부, getter, setter)

 

메서드 데코레이터는, 세 개의 인수를 가진다.

target: any,
propertyKey: string,
descriptor: PropertyDescriptor
  • 정적 멤버가 속한 클래스의 생성자 함수이거나, 인스턴스 멤버에 대한 클래스의 프로토타입
  • 멤버의 이름
  • 멤버의 속성설명자(Property Descriptor)

 

메서드 데커레이터의 반환값

메서드 데커레이터가 값을 반환한다면, 해당 메서드의 속성 설명자가 된다.

 

 

구현

export class MethodDecorationTest {
  @HandleError()
  hello() {
    console.log('메서드호출');
    throw new Error('테스트 에러 발생');
  }
}
function HandleError() {
  return function (
    target: any,
    propertyKey: string,
    descriptor: PropertyDescriptor
  ) {
    console.log(target);
    console.log(propertyKey);
    console.log(descriptor);

    const method = descriptor.value;

    descriptor.value = function () {
      try {
        method();
      } catch (e) {
        //에러핸들링 로직구현
		console.log('에러로 잡혀버렸넹');
      }
    };
  };
}

 

결과

target : {}

propertyKey : hello (함수이름)

descriptor : 메서드속성설명자

 

메서드 실행 시

반응형