[Typescript] 제네릭(Generic)

2025. 3. 24. 18:03·Typescript

❓ 정의

- 일반화된 데이터 타입

- 함수, 타입, 클래스 등에서 내부적으로 사용될 타입을 미리 정해두지 않고 타입 변수를 사용해서 해당 위치를 비워놓은 다음, 실제로 그 값을 사용할 때 외부에서 타입 변수 자리에 타입을 지정하여 사용하는 방식

= 코드를 작성할 때 타입을 고정하지 않고, 사용할 때 타입을 지정할 수 있도록 하는 기능

- any와 다른 점은 아무 타입이나 무분별하게 받는 것이 아니라, 배열 생성 시점에 원하는 타입으로 특정 가능하다는 것

▶ 기본 사용 예시

type ExampleArrayType<T> = T[];

const array1: ExampleArrayType<string> = ["치킨", "피자"];

❗ 사용이유

✅ 다양한 타입을 받게 함으로써 코드를 효율적으로 재사용

✅ 의도를 명확하게 드러냄으로써 가독성 향상

 

✅ any를 쓰지 않고 유연한 타입 적용이 가능해 안전함


💥 주의

1️⃣ 특정 타입에서만 존재하는 멤버 참조시 에러 발생

- 예) 배열에만 존재하는 length 속성을 제네릭에서 참조하려고 할 때 에러 발생

2️⃣ 파일 확장자가 tsx일 때 화살표 함수에 제네릭 사용시 에러 발생

- 제네릭의 꺾쇠괄호와 태그의 꺾쇠괄호를 혼동하여 생기는 문제

-> 해결법: extends 키워드를 사용해 컴파일러에게 특정 타입의 하위 타입만 올 수 있음을 알려주면 됨!

const arrowExampleFunc = <T extends {}>(arg: T): T[] => {
	return new Array(3).fill(arg);
};

아래는 T가 length 속성을 가진 타입만 받을 수 있도록 제한한 예시이다.

function getLength<T extends { length: number }>(item: T): number {
  return item.length;
}

getLength("Hello");  // ✅ 문자열은 length 속성이 있음
getLength([1, 2, 3]);  // ✅ 배열도 length 속성이 있음
// getLength(10);  // ❌ 숫자는 length 속성이 없음 (에러 발생)

3️⃣ 제네릭 오남용

- 한 번만 사용되는 경우(굳이 사용하지 않아도 됨), any 사용, 과한 사용 주의!


💠 예시

1️⃣ API 응답 값 타입 지정

interface ExampleApiResponse<Data> {
	data: Data;
	statusCode: string;
}

const fetchPriceInfo = (): Promise<MobileApiResponse<PriceInfo>> => {
	const ~~~

이렇게 API 응답 값에 따라 달라지는 data를 제네릭 타입 Data로 선언한 후 실제 API 응답 값의 타입을 지정할 수 있다.

 

 

 

 

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'Typescript' 카테고리의 다른 글

[Typescript] interface와 type  (1) 2025.04.17
[Typescript] 원시 타입과 객체 타입  (0) 2025.03.22
[Typescript] enum이란 무엇인가?  (0) 2025.03.22
'Typescript' 카테고리의 다른 글
  • [Typescript] interface와 type
  • [Typescript] 원시 타입과 객체 타입
  • [Typescript] enum이란 무엇인가?
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    개발자취업
    항해99
    코딩테스트준비
    Til
    99클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
[Typescript] 제네릭(Generic)
상단으로

티스토리툴바