[TS] 제네릭 클래스

TIL

숫자 배열을 관리하는 NumberList 클래스를 만들어보자.

class NumberList {
  constructor(private list: number[]) {}

  push(data: number) {
    this.list.push(data);
  }

  pop() {
    return this.list.pop();
  }

  print() {
    console.log(this.list);
  }
}

list 필드는 private으로 설정하여 클래스 내부에서만 접근 가능하도록 했다.

생성자에서 필드 선언과 초기화를 동시에 수행하며, push, pop, print 메서드로 배열을 조작한다.

 

만약 문자열 배열을 관리하는 StringList 클래스도 필요하다면 어떻게 해야 할까?

제네릭 없이는 새로운 클래스를 만들어야 하므로 중복 코드가 발생한다.

 

제네릭 클래스 사용하기

제네릭을 사용하면 하나의 클래스로 여러 타입을 처리할 수 있다.

class List<T> {
  constructor(private list: T[]) {}

  push(data: T) {
    this.list.push(data);
  }

  pop() {
    return this.list.pop();
  }

  print() {
    console.log(this.list);
  }
}

const numberList = new List([1, 2, 3]);
numberList.pop();
numberList.push(4);
numberList.print(); // [1, 2, 4]

const stringList = new List(["1", "2"]);
stringList.push("hello");
stringList.print(); // ["1", "2", "hello"]

클래스 이름 뒤에 <T>를 선언하면 제네릭 클래스가 되고, 타입 변수 T를 클래스 내부에서 자유롭게 사용할 수 있다.

생성자에 전달하는 배열의 타입에 따라 T가 자동으로 추론된다.

 

타입 명시하기

타입 변수를 직접 지정하고 싶다면 다음과 같이 작성한다.

const numberList = new List<number>([1, 2, 3]);
const stringList = new List<string>(["1", "2"]);

생성자에 인수를 전달하면 타입이 자동으로 추론되므로 대부분의 경우 타입을 생략해도 된다.

'TIL' 카테고리의 다른 글

[TS] 제네릭 함수 타입 정의 및 응용 연습  (0) 2025.11.04
[TS] 프로미스와 제네릭  (0) 2025.11.04
[TS] 제네릭 인터페이스와 타입 별칭  (0) 2025.11.04
[TS] map, forEach 메서드 타입 정의하기  (0) 2025.11.04
[TS] 제네릭 타입 변수 응용  (0) 2025.11.04
'TIL' 카테고리의 다른 글
  • [TS] 제네릭 함수 타입 정의 및 응용 연습
  • [TS] 프로미스와 제네릭
  • [TS] 제네릭 인터페이스와 타입 별칭
  • [TS] map, forEach 메서드 타입 정의하기
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    CS
    typescript
    인터페이스
    algorithm
    generic
    타입 좁히기
    바닐라 자바스크립트
    emotion diary
    Spa
    Trouble Shooting
    알고리즘
    클래스
    ai 감성 일기장
    memory
    페이지 라우터
    제네릭
    javascript
    App Router
    Pages Router
    문자열
    cs50
    자료구조
    함수 타입
    C
    배열
    useState
    react
    앱 라우터
    트러블 슈팅
    Next.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[TS] 제네릭 클래스
상단으로

티스토리툴바