타입스크립트에서 데코레이터를 사용하면 각종 리플렉션 기능을 활용하여 타입 추론(type inference)을 개선할 수 있습니다. 이를 통해 코드의 가독성과 안정성을 향상시킬 수 있습니다.
데코레이터란 무엇인가요?
먼저, 데코레이터가 무엇인지 알아보겠습니다. 데코레이터는 클래스, 메서드, 프로퍼티 또는 매개변수 등의 선언을 수정하거나 확장할 수 있는 특별한 종류의 선언으로, @
기호를 이용하여 사용합니다.
function myDecorator(target: any, propertyKey: string) {
// 데코레이터 로직 구현
}
class MyClass {
@myDecorator
myProperty: string;
}
데코레이터를 활용하여 코드의 동작과 구조를 변경하거나 추가 기능을 구현할 수 있습니다.
타입 추론 개선을 위한 데코레이터 활용
타입 추론을 개선하기 위해 다음과 같은 방법들을 데코레이터를 통해 활용할 수 있습니다.
타입 가드 적용
데코레이터를 사용하여 타입 가드(logic that checks the type of a variable)를 구현할 수 있습니다. 예를 들어, 문자열이 비어있지 않은지 검사하여 null
또는 undefined
를 방지할 수 있습니다.
function nonEmpty(target: any, propertyKey: string) {
let value: string;
Object.defineProperty(target, propertyKey, {
get: () => value,
set: (newValue: string) => {
if (!newValue) {
throw new Error('Value must not be empty');
}
value = newValue;
},
});
}
class Example {
@nonEmpty
myProperty: string;
}
타입 확장
데코레이터를 사용하여 프로퍼티의 타입을 확장하거나 변경할 수 있습니다.
function arrayOfStrings(target: any, propertyKey: string) {
let value: string[];
Object.defineProperty(target, propertyKey, {
get: () => value,
set: (newValue: string[]) => {
// 추가적인 검사 또는 로직 수행
value = newValue;
},
});
}
class Example {
@arrayOfStrings
myProperty: string[];
}
메타데이터 확장
데코레이터를 사용하여 메타데이터를 추가하여 타입 추론을 개선할 수 있습니다.
function addMetadata(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
Reflect.defineMetadata('customMetadata', 'example', target, propertyKey);
}
class Example {
@addMetadata
myProperty: string;
}
커스텀 타입 추론 로직 구현
데코레이터를 사용하여 커스텀한 타입 추론 로직을 구현할 수 있습니다. 이를 통해 복잡한 타입 추론을 단순하게 만들 수 있습니다.
function typeInferenceLogic(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
if (propertyKey === 'myProperty') {
descriptor.value = 123;
}
}
class Example {
@typeInferenceLogic
myProperty: number;
}
결론
데코레이터를 활용하여 타입 추론을 개선하면 코드의 가독성과 안정성을 향상시킬 수 있습니다. 데코레이터를 활용하여 타입 가드, 타입 확장, 메타데이터 추가, 커스텀 타입 추론 로직 등을 구현하여 타입 추론을 보다 정확하게 제어할 수 있습니다.
이상으로 타입 추론을 위한 데코레이터 활용 방법에 대해 알아보았습니다.
참고 자료: