타입스크립트에서 Generics(일반화)는 코드의 유연성을 높이고 재사용성을 높이는 데 도움이 되는 강력한 기능입니다.
Generics를 사용하면 함수, 클래스, 인터페이스 등에서 사용되는 데이터 타입을 명확하게 지정하지 않고 , 나중에 사용될 때에 결정할 수 있습니다.
Generics를 사용하면 재사용 가능한 코드를 작성할 때 특정 타입에 의존하지 않고 유연하게 사용 할 수 있습니다.
예를 들면, 배열을 역순으로 정렬하는 함수를 작성하고자 할때, 이 함수가 어떤 타입의 배열에 대해서도 작동하도록 Generics를 활용 할 수 있습니다.
function reverseArray<T>(arrayL T[]): T[] {
return array.reverse();
}
let numbers: number[] = [1, 2, 3, 4, 5];
let reversedNumbers: number[] = reverseArray(numbers);
console.log(reversedNumbers); // [5, 4, 3, 2, 1]
let strings: string[] = ["apple", "banana", "orange"];
let reversedStrings: string[] = reverseArray(strings);
console.log(reversedStrings); // ["orange", "banana", "apple"]
위의 예제에서 reverseArray 함수는 제네릭 타입 매개변수 T 를 사용하여 배열의 요소 타입을 지정하지 않고 , 어떤 타입의 배열이든 역순으로 정렬할 수 있도록 합니다. 함수 호출시에 타입이 결정되며, TypeScript 컴파일러는 타입 추론을 통해 적절한 타입을 유추합니다.
간단한 스택(Stack) 자료구조를 구현해보자. 해당 스택에는 특정 타입의 요소만 넣을 수 있도록 제네릭을 활용한 예제입니다.
class Stack<T> {
private items: T[];
constructor() {
this.items = [];
}
push(item: T): void {
this.items.push(item);
}
pop(): T | undefined {
return this.items.pop();
}
peek(): T | undefined {
return this.items[this.items.length - 1];
}
isEmpty(): boolean {
return this.items.length === 0;
}
size(): number {
return this.items.length;
}
clear(): void {
this.items = [];
}
}
let numberStack = new Stack<number>();
numberStack.push(1);
numberStack.push(2);
numberStack.push(3);
console.log(numberStack.peek()); // 3
console.log(numberStack.size()); // 3
// 문자열 타입을 저장하는 스택 생성
let stringStack = new Stack<string>();
stringStack.push("apple");
stringStack.push("banana");
stringStack.push("orange");
console.log(stringStack.peek()); // orange
console.log(stringStack.size()); // 3
위의 예제에서 Stack 클래스는 제네릭 타입 매개변수 T를 사용하여 요소의 타입을 유연하게 지정할 수 있습니다. 이렇게 하면 Stack 클래스를 생성할 때 특정 타입을 명시할 수 있으며, 해당 스택은 지정된 타입의 요소만을 저장할 수 있습니다.
'TypeScript' 카테고리의 다른 글
TypeScript 인터페이스 (0) | 2024.02.20 |
---|---|
Typescript 기초 (1) | 2024.02.07 |