이번 글에서는 제네릭(Generic), 타입 가드(Type Guard), 서명(Signature) 및 오버로드(Overload)의 영역을 살펴봅니다. 이러한 개념은 유연하고 재사용 가능하며 타입이 안전한 코드를 만들기 위한 기본 구성 요소입니다. 이 시리즈를 진행하면서 이러한 기능이 어떻게 강력하고 유지 관리가 쉬운 TypeScript 애플리케이션을 만드는 데 중추적인 역할을 하는지 알아볼 수 있습니다.
제네릭
TypeScript의 제네릭을 사용하면 타입을 매개변수로 전달할 수 있어 재사용 가능한 type-safe 함수 및 클래스를 만들 수 있습니다. 이를 통해 다양한 데이터 타입에서 작동할 수 있는 함수나 클래스를 작성할 수 있습니다.
function identity<T>(arg: T): T {
return arg;
}
const result = identity<string>('Hello, TypeScript!');
// result is of type string
이 예제에서 identity
함수는 T 타입에 대해 제네릭이므로 모든 타입에서 작동할 수 있습니다.
타입 가드
타입 가드는 특정 코드 블록 내에서 변수의 타입을 좁히는 방법입니다. 런타임 검사를 기반으로 타입별 연산을 수행하기 위해 유니온(union) 타입과 함께 자주 사용됩니다.
function isString(value: any): value is string {
return typeof value === 'string';
}
let x: any = 'Hello, TypeScript!';
if (isString(x)) {
// 이 블록 내에서, 타입스크립트는 x가 문자열이라는 것을 알고 있습니다.
console.log(x.length);
}
isString
함수는 조건부 블록 내에서 타입스크립트가 x
의 타입을 이해하는 데 도움이 되는 타입 가드입니다.
Signature
TypeScript에서 함수 서명은 매개변수의 타입과 함수의 반환 타입을 설명합니다. 여기에는 매개변수 이름, 타입 및 반환 타입이 포함됩니다.
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (a, b) => a + b;
const subtract: MathOperation = (a, b) => a - b;
여기서 MathOperation
은 두 개의 숫자를 취하고 숫자를 반환하는 함수를 나타내는 타입입니다. add
와 subtract
모두 이 서명을 준수하는 함수입니다.
Overload
함수 오버로드를 사용하면 단일 함수에 대해 여러 타입 서명을 제공할 수 있습니다. 이는 인수의 타입이나 수에 따라 함수가 다르게 동작할 때 특히 유용합니다.
function greet(person: string): string;
function greet(person: string, age: number): string;
function greet(person: string, age?: number): string {
if (age !== undefined) {
return `Hello, ${person}! You are ${age} years old.`;
} else {
return `Hello, ${person}!`;
}
}
이 예제에서 greet
함수에는 서로 다른 매개변수 타입을 지정하는 두 개의 오버로드가 있습니다. 실제 구현은 이러한 오버로드를 따르고 그에 따라 다양한 경우를 처리합니다.
결론
이러한 개념은 TypeScript에서 유연하고 유형이 안전한 코드를 작성하기 위한 강력한 도구 세트를 제공합니다.
'Language > TypeScript' 카테고리의 다른 글
[TypeScript] 엄격한 타입 검사, 고급 컴파일러 옵션 (3) | 2024.05.10 |
---|---|
[TypeScript] Namespace, Generic and Custom Module (2) | 2024.05.03 |
[TypeScript] 고급 타입, 매핑된 타입, keyof/typeof (4) | 2024.04.30 |
[TypeScript] Set/Get, Protected, Private/Public/Static Members (6) | 2024.04.24 |
[TypeScript] OOP 관행, 클래스 및 상속 (64) | 2024.04.22 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!