엘리스 SW 엔지니어 트랙 25일차
송현지 강사님 온라인 강의날
데코레이터
함수를 감싸는 함수
런타임에 호출
아직 표준이 안된 함수라
Decorator 사용하려면
자바스크립트 Babel,
타입스크립트 "experimentalDecorators": true
해줘야된다
데코레이터가 있는 선언에 대해
특정 타입의 메타데이터 내보내려면
reflect-metadata 설치
npm i reflect-metadata --save
yarn add reflect-metadata
데코레이터전에 알아야할 JavaScript
일급객체: 값으로 사용가능
클로저: 내부 변수 끝나도 사용가능, 내부 변수를 누군가 가리키고 있으면 가비지 콜렉터가 없애지 않는다
고차 함수(함수 반환하는 함수)
Decorator Factory
데코레이터 함수를 반환하는 녀석
데코레이터 함수 예시
// 데코레이터 팩토리
function decoratorFactory(value: string) {
// 데코레이터 함수 리턴
return function(
// 매개변수 3가지
target:any,
propertKey: string,
propertyDescriptor:PropertyDescriptor) {
// 데코레이터 팩토리 매개변수 value 출력
console.log(value)
}
}
class ExampleClass {
@decoratorFactory("룰루랄라 퇴근이다")
static method() {}
}
ExampleClass.method();
Class Decorator(클래스 데코레이터)
생성자 함수에 적용되는 데코레이터
생성자 함수 기능 확장 또는 프로퍼티 추가할 때 사용한다
클래스 선언직전에 선언
생성자 함수에 적용
매개변수는 생성자함수
특징
- 생성자 함수가 유일한 매개변수
- 기존 생성자 함수 지키면서 프로퍼티 추가하고 싶으면
class extends <데코레이터함수 매개변수 이름> - 클래스 데코레이터에서 새로 추가한 프로퍼티는
타입스크립트에서 알 수 없다
// @ts-ignore 하면 타입스크립트가 무시
Method Decorator
메서드 관찰, 수정, 오버라이딩
실무에선
로깅, 타이머(performance), permission guard 등 사용
메서드 property descriptor에 적용
세 가지 인자 받는다
Accessor Decorator
접근자(getter, setter) 관찰, 수정, 오버라이딩
매개변수는 메서드 데코레이터와 같다
Property Decorator
클래스의 프로퍼티 관찰, 수정, 오버라이딩
target, propertyKey 두 가지 인자 받는다
Parametor Decorator
메서드에서 선언되었다는 것만 관찰가능
그 이상은
reflect-metadata 라이브러리 사용
데코레이터의 동작
데코레이터 합성
여러 개 데코레이터를 한번에 쓰는 것
여러 개 쓰면 아래 부터 실행
@log()
@timer()
하나도 모르겠다
필요해지면 찾아보자
'Web Dev > ELICE' 카테고리의 다른 글
27 (1/3) :: Node.js, ES6, 비동기 삼형제, Event Loop (0) | 2021.12.01 |
---|---|
26 :: Node.js, 서버 만들기, express.js, 왜 Docker 쓰나 (0) | 2021.11.30 |
25 (1/2) :: Type Guard, Optional Chaining, 함수 오버로딩, 인덱스 시그니처 (0) | 2021.11.27 |
24 :: TypeScript Generic, Constraints, keyof (0) | 2021.11.26 |
23 (3/3) :: TypeScript 복습, 실습 (0) | 2021.11.25 |