TypeScript-섹션7. 제네릭-제네릭 클래스(5)

손주완·2025년 7월 15일

Typescript Section7

목록 보기
5/6

✅ 제네릭이 없는 클래스

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

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

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

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

const numberList = new NumberList([1, 2, 3]);

❌ 비효율적인 클래스 중복 정의

StringList도 필요하다면 클래스 정의를 중복하게 됨.

class StringList {
  constructor(private list: string[]) {}

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

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

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

const numberList = new NumberList([1, 2, 3]);
const stringList = new StringList(["1", "2", "3"]);

이렇게 되면 코드 중복이 심하고 유지보수도 어려워짐.


✅ 제네릭 클래스로 개선하기

다음과 같이 제네릭을 적용해 다양한 타입의 리스트를 처리할 수 있는 범용 클래스를 만들 수 있음.

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]);
const stringList = new List(["1", "2"]);

🎯 타입 명시적으로 지정하기

타입 추론이 가능하지만 명시적으로 타입을 지정할 수도 있음.

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

이처럼 제네릭 클래스는 코드 중복을 줄이고 다양한 타입을 유연하게 처리할 수 있어 효율적.

0개의 댓글