제네릭

송민지·2023년 3월 29일
0

cs스터디

목록 보기
11/18

typescript의 제네릭은 C# 이나 JAVA에서 쓰이는 제네릭과 같다.

정적언어에서는 함수 또는 클래스를 정의하는 시점에 매개변수나 반환값의 타입을 선언해야 한다. 하지만 이 시점에서 매개변수나 반환값의 타입을 선언하기 어려운 경우가 있다.(ex. 타입 선언해 줘야 할것이 많을때)

이때 함수나 클래스가 타입의 값을 추론할 수 있도록 도와줄 수 있다.

function getSize(arr: number[]): number
	return arr.length;

const arr1 = [1,2,3]
getSize(arr1); // 3 

위와 같은 코드가 있을때 다른 배열을 추가해보도록 하자

function getSize(arr: number[]): number
	return arr.length;

const arr1 = [1,2,3]
getSize(arr1); // 3 

const arr2 = [true, false, true]
getSize(arr2) // 에러

(arr2) 여기가 에러가 날 것이다

여기 에러를 해결하기위한 방법은 3가지 정도 있다.

  1. 함수 오버로드 사용
  2. 함수에 타입추가
  3. 제네릭 이용

함수에 타입을 추가해도 되지만 만일 이 함수 재활용 하는 곳이 많다면?
그 때마다 계속 타입을 추가해야 될까?
그건 코드 가독성에 좋지 않다고 생각한다.

함수 오버로드를 사용해도 좋지만 오늘의 주제 제네렉을 이용해보도록 하자

function getSize<T>(arr: number[]): number
	return arr.length;

const arr1 = [1,2,3]
getSize(arr1); // 3 

getSize 옆에 꺽쇠 안에 T가 들어가 있다.
T는 타입 파라미터라 하는데 일반적으로 T를 사용한다.

이 T는 어떤 타입을 전달받아서 이 함수에서 사용할 수 있도록 해준다.
-> 즉, 사용하는 곳에서 타입을 결정해준다.

장점

  1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.

  2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.

  3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

컬렉션 클래스에서 제네릭 사용하는 이유


TypeScript Documentation - Generics
코딩앙마 - TypeScript #7 제네릭 Generics
자바 - 제네릭의 이해

profile
기록하는 일상

0개의 댓글