패스잇
프론트엔드 개발 · 심화

TypeScript의 Decorator를 활용하여 메타데이터 기반의 AOP(Aspect-Oriented Programming) 패턴을 구현할 때, 타입 안전성을 어떻게 확보할 수 있을까요? 특히 `reflect-metadata` 라이브러리와 함께 사용될 때, 컴파일 타임에 타입 정보를 활용하여 런타임에 메타데이터를 안전하게 주입하고 사용하는 방법에 대해 설명해주세요.

힌트 · `emitDecoratorMetadata` 컴파일러 옵션과 `reflect-metadata`를 통해 클래스, 메서드, 속성 등에 대한 타입 정보를 런타임에 조회할 수 있습니다. 이를 활용하여 데코레이터가 적용될 대상의 타입을 검사하고 적절한 로직을 수행하도록 설계할 수 있습니다.

데코레이터 팩토리타입 추론타입 가드제네릭 타입조건부 타입

모범답안

TypeScript 데코레이터를 활용한 AOP 구현 시 타입 안전성을 확보하는 방법은 크게 두 가지 측면에서 고려할 수 있습니다.

첫째, emitDecoratorMetadata 컴파일러 옵션과 reflect-metadata 라이브러리를 활용하여 런타임에 타입 정보를 얻습니다. 데코레이터 팩토리를 사용하여 데코레이터가 적용될 대상의 타입을 추론하고, 이를 기반으로 타입 가드를 적용하여 런타임에 타입 검사를 수행합니다. 예를 들어, 특정 타입의 인자만 허용하는 데코레이터를 만들 수 있습니다.

둘째, 제네릭 타입과 조건부 타입을 활용하여 데코레이터의 타입 안정성을 강화합니다. 데코레이터 팩토리에 제네릭 타입을 적용하여 데코레이터가 적용될 대상의 타입에 따라 다른 로직을 수행하도록 설계할 수 있습니다. 조건부 타입을 사용하여 특정 조건에 따라 데코레이터의 반환 타입을 변경할 수도 있습니다.

이러한 방법들을 통해 컴파일 타임에 타입 정보를 활용하여 런타임에 메타데이터를 안전하게 주입하고 사용할 수 있으며, TypeScript의 강력한 타입 시스템을 최대한 활용하여 AOP 구현의 타입 안전성을 확보할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 TypeScript 면접 질문

← TypeScript 면접 질문 전체 보기