제네릭이란 어떠한 클래스 혹은 함수에서 사용할 타입을 그 함수나 클래스를 사용할 때 결정하는 프로그래밍 기법을 말한다.
java 또는 C와 같이 다른 정적 타입 프로그래밍 언어의 경우 변수를 생성하는 과정에서 이미 타입이 선언된다.
int a;
double b;
하지만 JavaScript는 원래 타입 선언이 필요하지 않고, 코드를 실행시키기 전까지는 함수와 클래스가 모든 타입에 대응한다.
let num = 0.001;
let string = []
let arr = "sfasf"
자바스크립트에서 타입스크립트를 사용해 아래와 같이 타입을 명시해 줄 수 있다.
let str: string = 'hi';
let num: number = 100;
let arr: Array = [1, 2, 3];
let arr2: number[] = [1, 2, 3];
let obj: object = {};
let obj2: { name: string, age: number} = {
name: 'hoho',
age: 22
};
any는 어떤 타입을 가질지 모르는 값에 부여하는 타입으로 타입스크립트의 생산성을 높여주는 유용한 타입이다. 하지만 무분별한 any 타입의 사용은 보통의 자바스크립트와 다를바가 없기 때문에 가능하면 정확한 타입을 지정하거나 제네릭 타입을 이용하는 것이 좋다.
제네릭을 사용할 때, 타입 파라미터는 하나 이상 복수개를 정의할 수 있으며, 이 타입 파라미터는 입력 파라미터, 리턴 타입, 함수 본문 등 어느 곳에서도 사용될 수 있다. 제네릭은 모든 타입을 받아들인다는 점에서 입력파라미터 혹은 리턴타입에 any 타입을 쓰는 것과 비슷한 점이 있지만, 제네릭은 사용시 타입파라미터를 구체적으로 정의하기 때문에 구체적인 입력 타입, 리턴타입을 정의한 것과 같이 타입 체킹을 하게 된다는 장점이 있다.
const getGenericsArrow = <T, U, V>(arg1: T, arg2: U, arg3: V): [V, U, T] => {
return [arg3, arg2, arg1];
};
const result10 = getGenericsArrow("철수", true, 8);