TypeScript-섹션7. 제네릭-제네릭 소개(1)

손주완·2025년 7월 13일

Typescript Section7

목록 보기
1/6

✅ 선요약

C++의 템플릿 함수와 동일. 로 입력된 타입에 따라 자동 추론

  • 제네릭(Generic)은 함수, 클래스, 타입 등을 다양한 타입과 함께 동작하도록 만들어주는 기능
  • anyunknown으로는 타입 안정성을 완전히 확보하기 어려움
  • 제네릭을 사용하면 입력된 타입에 따라 반환 타입을 자동으로 지정할 수 있음
  • 호출 시 직접 타입을 명시할 수도 있고, 대부분은 자동 추론됨
  • 코드의 재사용성과 타입 안정성을 동시에 확보할 수 있음

📌 제네릭이 필요한 상황

function func(value: any) {
  return value;
}

let num = func(10);       // any 타입
let str = func("string"); // any 타입

num.toUpperCase(); // 런타임 오류 발생 가능 (컴파일러가 감지 못함)

❓ unknown을 사용한 경우

function func(value: unknown) {
  return value;
}

let num = func(10);
let str = func("string");

num.toFixed(); // ❌ 오류

unknown은 안전하지만 사용 전 타입 좁히기 필요. 귀찮고 불편하다.


💡 우리가 원하는 것

  • 전달한 인수의 타입이 그대로 반환 타입으로 반영되기를 원함

✅ 제네릭 함수로 해결

function func<T>(value: T): T {
  return value;
}

let num = func(10);         // number 타입
let str = func("string");   // string 타입
  • <T>: 타입 변수를 선언
  • T는 함수 호출 시 결정됨 (여기선 number, string)

✍ 타입을 명시적으로 지정하기

function func<T>(value: T): T {
  return value;
}

let arr = func<[number, number, number]>([1, 2, 3]);
  • T에 튜플 타입을 직접 지정함
  • 타입스크립트는 일반적으로 number[]로 추론하므로, 정밀한 타입 추론이 필요할 땐 직접 명시

📌 요약

  • any는 너무 느슨하고, unknown은 너무 엄격함
  • 제네릭은 타입을 입력값에 맞춰 자동으로 설정해줌
  • <T>와 같은 타입 변수 사용
  • 함수, 클래스, 인터페이스 등 여러 곳에서 활용 가능
  • 명시적으로 타입을 넘길 수도 있고, 자동 추론도 대부분 잘 작동함

제네릭은 타입스크립트의 가장 강력한 기능 중 하나로,
안정성과 유연성을 동시에 만족시킬 수 있는 패턴이다.

0개의 댓글