[TypeScript] 제네릭(Generic) 기초부터 실무까지 정리

2025. 3. 25. 18:53·프로그래밍/typescript

[TypeScript] 제네릭(Generic) 기초부터 실무까지 정리

TypeScript의 제네릭(Generic)은 코드의 유연성과 재사용성을 높여주는 강력한 기능입니다.
함수, 클래스, 인터페이스에서 다양한 타입을 다뤄야 할 때, 제네릭을 사용하면 코드 중복 없이 타입 안정성을 유지할 수 있습니다.

이 글에서는 제네릭의 기초 문법부터, 실무에서 자주 쓰이는 활용 예제까지 정리해드리겠습니다.


✅ 제네릭이란?

제네릭은 타입을 고정하지 않고, 사용할 때 지정할 수 있게 만드는 기능입니다.
기본 문법은 <T>를 사용하는 형태입니다.


// 제네릭 함수 예시
function identity<T>(value: T): T {
  return value;
}

// 사용 예
identity<string>("hello"); // "hello"
identity<number>(123);    // 123

→ 위 함수는 string, number, boolean 등 다양한 타입에 유연하게 대응할 수 있습니다.


✅ 제네릭 인터페이스


interface ApiResponse<T> {
  data: T;
  success: boolean;
  message?: string;
}

const userResponse: ApiResponse<{ name: string; age: number }> = {
  data: { name: "홍길동", age: 30 },
  success: true,
};

→ 제네릭 인터페이스는 API 응답, Form 구조 등 유형이 다양한 객체 정의에 유용합니다.


✅ 제네릭 클래스


class StorageBox<T> {
  private items: T[] = [];

  add(item: T) {
    this.items.push(item);
  }

  getAll(): T[] {
    return this.items;
  }
}

const stringBox = new StorageBox<string>();
stringBox.add("Hello");
stringBox.add("World");

const numbers = new StorageBox<number>();
numbers.add(10);
numbers.add(20);

→ StorageBox<T>는 문자열, 숫자 등 타입에 따라 다른 저장소를 만들 수 있습니다.


✅ 제네릭에 타입 제약 추가하기 (extends)


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

getLength("hello");        // ✅
getLength([1, 2, 3]);       // ✅
getLength(123);            // ❌ 에러: number는 length 속성이 없음

→ extends를 사용하면 제네릭 타입이 어떤 속성을 반드시 가지고 있어야 한다는 제약을 줄 수 있습니다.


✅ 실무에서 많이 쓰는 제네릭 패턴

1. 유연한 유틸리티 함수 만들기


function getFirstItem<T>(arr: T[]): T | undefined {
  return arr[0];
}

2. 특정 키만 추출하기 (keyof 활용)


function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

const user = { name: "홍길동", age: 25 };
getValue(user, "name"); // "홍길동"

✅ 제네릭이 중요한 이유

  • 타입 안정성과 유연성을 동시에 확보할 수 있음
  • 코드 중복 없이 다양한 타입에 대응 가능
  • 실무에서 API 응답, Form 처리, 상태관리 등에 광범위하게 활용됨

📌 마무리

TypeScript의 제네릭은 처음엔 어렵게 느껴질 수 있지만, 한 번 익혀두면 다양한 상황에서 코드를 깔끔하고 안정적으로 작성할 수 있게 됩니다.

앞으로 유틸리티 타입(Partial, Pick 등)과 함께 사용하는 패턴도 소개할 예정입니다!
도움이 되셨다면 공감 / 댓글 부탁드립니다 😊

반응형
저작자표시 비영리 (새창열림)

'프로그래밍 > typescript' 카테고리의 다른 글

[typescript] 타입스크립트에서 'this' 바인딩 문제 해결하기  (2) 2024.12.26
[typescript] Word Addin에서 지정된 북마크에 텍스트를 추가하는 함수  (0) 2024.10.11
'프로그래밍/typescript' 카테고리의 다른 글
  • [typescript] 타입스크립트에서 'this' 바인딩 문제 해결하기
  • [typescript] Word Addin에서 지정된 북마크에 텍스트를 추가하는 함수
큐레이트
큐레이트
저의 일상을 기록하는 블로그입니다.
  • 큐레이트
    큐레이트의 기록
    큐레이트
  • 전체
    오늘
    어제
    • 분류 전체보기 (190) N
      • 국내여행 (37)
        • 애견여행 (33)
        • 맛집여행 (2)
      • 프로그래밍 (82)
        • C# (24)
        • Python (24)
        • Flutter (5)
        • .NET (4)
        • ASP (7)
        • Html (5)
        • Tomcat (2)
        • typescript (3)
        • etc (8)
      • 일상생활 (71) N
        • 다이어트일지 (70) N
        • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 복이랑스마트스토어
    • 복이랑블로그
  • 공지사항

    • 블로그 소개
  • 인기 글

  • 태그

    헬스
    Flutter
    Python
    오블완
    식단관리
    일상생활
    제주도
    iis
    다이어트일지
    티스토리챌린지
    자동매매
    FastAPI
    자동화
    식단
    C#
    국내여행
    애견동반
    애견동반여행
    운동일지
    애견여행
    오운완
    제주도여행
    HTML
    다이어트 일지
    pt
    체중기록
    파이썬
    제주도애견동반여행
    다이어트
    DevExpress
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
큐레이트
[TypeScript] 제네릭(Generic) 기초부터 실무까지 정리
상단으로

티스토리툴바