Generic
Intro
우리가 함수를 사용하는 이유는 무엇일까요? 행위의 추상화를 위해서 사용하기도 하지만 가장 핵심적인 기능은 특정 값을 넣었을때 특정 값을 반환하는 마치 자판기 같은 역할을 해주기 때문일 겁니다.
제너릭은 마치 타입의 함수 같습니다. 정적으로 선언하는 타입을 넘어, 확장 가능한 타입을 작성 할 수 있습니다.
pagination 데이터 타입을 예로 들어봅시다. pagination 은 api 서버의 부하를 줄이기위해 list 를 나누어 받는 식으로 구현이 됩니다. 아래 타입은 각각 'api/v1/post' 와 'api/v1/user' 응답 타입인데요. 문제는 없지만 page 와 count 를 연속적으로 작성하는 번거로움이 보입니다.
type PaginatedPosts = {
page: number; // 몇 페이지의 데이터인지
count: number; // data 의 전체 갯수
data: Post[];
}
type PaginatedUsers = {
page: number;
count: number;
data: User[];
}
genric 을 사용해서 아래와 같이 반복을 줄이고, 유연하게 작성이 가능합니다.
type Paginated<T> = {
page: number; // 몇 페이지의 데이터인지
count: number; // data 의 전체 갯수
data: T;
}
type PaginatedPosts = Paginated<Post[]>;
type PaginatedUsers = Paginated<User[]>