이번 글에서는 제네릭(Generic), 타입 가드(Type Guard), 서명(Signature) 및 오버로드(Overload)의 영역을 살펴봅니다. 이러한 개념은 유연하고 재사용 가능하며 타입이 안전한 코드를 만들기 위한 기본 구성 요소입니다. 이 시리즈를 진행하면서 이러한 기능이 어떻게 강력하고 유지 관리가 쉬운 TypeScript 애플리케이션을 만드는 데 중추적인 역할을 하는지 알아볼 수 있습니다.
제네릭
TypeScript의 제네릭을 사용하면 타입을 매개변수로 전달할 수 있어 재사용 가능한 type-safe 함수 및 클래스를 만들 수 있습니다. 이를 통해 다양한 데이터 타입에서 작동할 수 있는 함수나 클래스를 작성할 수 있습니다.
1 | function identity<T>(arg: T): T { |
이 예제에서 identity
함수는 T 타입에 대해 제네릭이므로 모든 타입에서 작동할 수 있습니다.
타입 가드
타입 가드는 특정 코드 블록 내에서 변수의 타입을 좁히는 방법입니다. 런타임 검사를 기반으로 타입별 연산을 수행하기 위해 유니온(union) 타입과 함께 자주 사용됩니다.
1 | function isString(value: any): value is string { |
isString
함수는 조건부 블록 내에서 타입스크립트가 x
의 타입을 이해하는 데 도움이 되는 타입 가드입니다.
Signature
TypeScript에서 함수 서명은 매개변수의 타입과 함수의 반환 타입을 설명합니다. 여기에는 매개변수 이름, 타입 및 반환 타입이 포함됩니다.
1 | type MathOperation = (a: number, b: number) => number; |
여기서 MathOperation
은 두 개의 숫자를 취하고 숫자를 반환하는 함수를 나타내는 타입입니다. add
와 subtract
모두 이 서명을 준수하는 함수입니다.
Overload
함수 오버로드를 사용하면 단일 함수에 대해 여러 타입 서명을 제공할 수 있습니다. 이는 인수의 타입이나 수에 따라 함수가 다르게 동작할 때 특히 유용합니다.
1 | function greet(person: string): string; |
이 예제에서 greet
함수에는 서로 다른 매개변수 타입을 지정하는 두 개의 오버로드가 있습니다. 실제 구현은 이러한 오버로드를 따르고 그에 따라 다양한 경우를 처리합니다.
결론
이러한 개념은 TypeScript에서 유연하고 유형이 안전한 코드를 작성하기 위한 강력한 도구 세트를 제공합니다.