카테고리 없음

[TS] Generic 타입 기초

정코우딩 2024. 6. 11. 13:53

우리는 TypeScript를 사용해 오며 기본적으로 변수에 타입을 지정할 때 아래와 같이 할 것이다.

const 상수:number = 2;
let 스트링배열: string[] = ['1','2','3']

 

하지만 이렇게하면 타입이 고정되기 때문에 유연하지 않다. 그래서 우리는 여기에 유연성을 가미한 유니온 타입을 사용한다.

const 하이: number | string | string[];

 

위를 보면 하이라는 상수에는 숫자,문자열,문자열배열이 들어올 수 있다. 하지만 프로그래밍을 하다 보면 내가 의도한 타입대로

흘러가지 않을수도 있고 그걸 방지하기 위해 유니온타입을 너무 많이 사용하면 타입 안전성이 보장되지 않는다.

 

그럼 어떻게 해야할까?  그럴 땐 Generic타입이 도움이 될 수 있다.

 

Generic 타입이란

타입을 고정된 값으로 명시하는게 아닌 변수를 통해 언제든지 변할 수 있는 타입을 제공하여 보다 유연하게

코딩할 수 있게 도와주는 것이다.

 

한마디로 타입을 변수화 한 것이다.

 

예를 들어보자

function add(x: string | number, y: string | number): string | number {
   return x + y;
}

add(1,2);
add('이정우','존잘');

 

위 와같이 add라는 함수를 정의하고 인자인 x, y둘다 유니온타입을 이용해 문자열 또는 숫자로 받아보자.

 

위와 같이 add를 호출하면 결과가 잘 나올것이다.

하지만 x와 y의 타입을 각각 다르게 넘길 수도 있는 유니온함정이 걸릴 수 도 있다.

 

이를 Generic 타입을 이용해 해결해 보자

 

function add<T>(x: T, y: Y):T { 
  return x + y
}

add<number>(1,2);
add<string>('hello', 'world');

 

Generic 타입을 이용하려면 꺽쇠와 문자 T를 시용해 표현한다.

또한 Generic 타입 함수를 호출할 때 <number>라고 정해주면, 함수의 T부분이 number로 바뀌며 실행된다.

 

any와 Generic의 차이

둘 다 타입을 모를 때를 대비해 사용하는 것인데 왜 Generic인가?

 

any타입은 말 그대로 어떤 것도 될 수 있는 타입이다.

그렇기 때문에 타입스크립트의 보호를 받지 못한다는 점이 가장 큰 단점이다.

그렇기 때문에 말도 안 되는 코드에서도 오류가 나지 않는다.

 

Generic은 선언시점이 아닌 사용시점에서 타입을 지정하기 때문에 타입을 any보다 더 낫다고 할 수 있다.

 

마치며

이번 블로그는 제네릭이 뭔지 이해만 할 수 있게끔 적었는데 다음블로그는 제네릭을 더 사용해 보며

심화적으로 적어봐야겠다.