제네릭은 C#, Java 등의 언어에서 재사용성이 높은 컴포넌트를 만들 때 자주 활용되는 특징입니다. 특히, 한가지 타입보다 여러 가지 타입에서 동작하는 컴포넌트를 생성하는데 사용됩니다.
function getText(text) {
return text;
}
위 함수는 text라는 파라미터에 값을 넘겨 받아 text를 반환해줍니다. hi, 10, true 등 어떤 값이 들어가더라도 그대로 반환합니다.
getText('hi'); // 'hi'
getText(10); // 10
getText(true); // true
이 관점에서 제네릭을 한번 살펴보겠습니다.
function getText<T>(text: T): T {
return text;
}
위 함수는 제네릭 기본 문법이 적용된 형태입니다. 이제 함수를 호출할 때 아래와 같이 함수 안에서 사용할 타입을 넘겨줄 수 있습니다.
getText<string>('hi');
getText<number>(10);
getText<boolean>(true);
위 코드 중 getText('hi')를 호출 했을 때 함수에서 제네릭이 어떻게 동작하는지 살펴보겠습니다.
function getText<string>(text: T): T {
return text;
}
먼저 위 함수에서 제네릭 타입이 이 되는 이유는 getText() 함수를 호출할 때 제네릭(함수에서 사용할 타입) 값으로 string을 넘겼기 때문입니다.
getText<string>();
그리고 나서 함수의 인자로 hi 라는 값을 아래와 같이 넘기게 되면
getText<string>('hi');
getText 함수는 아래와 같이 타입을 정의한 것과 같습니다.
function getText<string>(text: string): string {
return text;
}
위 함수는 입력 값의 타입이 string이면서 반환 값 타입도 string이어야 합니다.