ES6에 클래스 도입됨에 따라서 클래스 및 클래스 멤버에 어노테이션을 달거나 수정하기 위해 추가 기능을 필요한 특정 시나리오에 있습니다.

어노테이션과 메타 프로그래밍 구문을 추가 할 수 있는 방법을 제공합니다.

데코레이터(Decorators)

데코레이터는 클래스 선언, 메서드, 접근자, 프로터피 또는 매개 변수에 첨부할 수 있는 특수한 종류의 선언

데코레이터는 @expression 형식으로 사용함.

데코레이팅 된 선언에 대한 정보와 함께 런타임에 호출되는 함수여야함.

function sealed(target) {
 // target 변수와 함께 무언가 수행
}

데코레이터 팩토리 (Decorator Factories)

데코레이터 선언에 적용되는 방식을 원하는 대로 바꾸고 싶다면 데코레이터 팩토리를 작성할 수 있다.

데코레이터 팩토리는 단순히 데코레이터가 런타임에 호출할 표현식을 반환하는 함수입니다.

function color(value: stirng){ // 데코레이터 팩토리
	return function (target) { // 데코레이터
		// target, value 변수를 가지고 무언가 수행
	}
}

데코레이터 합성 (Decorator Composition)

데코레이터 적용법

@f @g x

@f
@g
x

여러 데코레이터가 단일 선언에 적용되는 경우 수학의 합성 함수와 유사함.

단일 선언에서 여러 데코레이터를 사용할때 다음 단계 수행됨

  1. 각 데코레이터의 표현은 위에서 아래로 평가
  2. 그런 다음 결과는 아래에서 위로 함수를 호출