[TS]제네릭

ddoni·2021년 2월 22일
0

## 제네릭

타입스크립트는 정적 언어이기 때문에 함수 또는 클래스를 정의하는 시점에 매개변수나 반환값의 타입을 선언해야한다. 그런데 정의하는 시점에 매개변수나 반환값에 대해 타입을 선언하기 어려운 경우가 있다.

✨ 클래스나 함수를 정의하는 시점에서 매개변수나 반환값의 타입이 예측이 안되어 any로 선언하고 사용하다 오류가 발생할 수 있다 → any타입으로 선언 후 그걸 상속받아 numberstring 타입 등 전용 클래스나 함수를 선언하는 것도 방법이지만 이는 좋은 방법이 아니다.

제네릭은 선언시점이 아니라 생성 시점에 타입을 명시하여 하나의 타입만이 아닌 다양한 타입을 사용할 수 있도록 하는 기법이다. <> 안에 있는 T는 제네릭을 선언할 때 관용적으로 사용되는 식별자로 타입 파라미터라고 한다. 제네릭은 함수에도 사용가능하다

//클래스에서 제네릭 사용 예시
class Queue<T> {
	protected data: Array<T> = [];
	push(item: T) {
		this.data.push(item);
	}
	pop(): T | undefined {
		return this.data.shift();
	}
}

//클래스 Queue를 사용하여 변수 생성 시점에
//타입 파라미터 부분에 타입을 지정하여 생성해준다
const numberQueue = new Queue<number>();
//함수에서 제네릭 사용 예시
function reverse<T>(items: T[]):T[] {
	return items.reverse();
}

const nums = [1, 2, 3, 4];

//전달되는 인자의 타입에 의해 제네릭 타입매개변수가 결정된다.
reverse(nums);

0개의 댓글