제네릭을 제네릭하게! 재사용성을 높여줘!
Generic : 통상적인, 일반적인 이라는 뜻을 갖고 있다.
-> 적용해본다면, "일반화"
1. 제네릭을 사용하기 이전에는...
function checkPoint(arg: number | null): number {
if (arg == null) {
throw new Error("not valid number!");
}
return arg;
}
// 만약 타입을 string, boolean 등 다양한 경우로 설정하고 싶을 경우에
// 일일히 다 만들면...??? 😱 더럽고 긴 코드 내역 생성...두둥..!
타입별로 다 만들면 정말,,,, 비실용적이고 보기만해도 끔찍한 결과를 낳겠죠?
any를 쓴다면? any는 타입보장이 안되고, 타입에 대한 정보가 없어지므로 사용하면 안 좋다!!
2. 그렇다면 제네릭은 어떻게 사용할까?
- 함수
function checkPoint<T>(arg: T | null): T {
if (arg == null) {
throw new Error("not valid number!");
}
return arg;
}
const number = checkPoint(123);
const boal: boolean = checkPoint(true); // 받을 때 좀 더 정확하게 타입을 지정해주는 것이 좋음
- 클래스
class Stack<T> {
private data: T[] = [];
constructor() {}
push(item: T): void {
this.data.push(item);
}
pop(): T {
return this.data.pop();
}
}
const numStack = new Stack<number>(); // number 타입으로 지정
numStack.push(123);
사용자가 함수를 사용할 때에 타입을 결정할 수 있고, 컴파일 할 때 타입을 보장 받을 수 있다.
function 함수명<제네릭 이름> / class 클래스명<제네릭 이름> 이렇게 사용하면 됩니다.
제네릭 이름 값에는 타입이 어떤 것이든 다 들어올 수 있다. 사용자가 정하기 나름!!! 아주 유용하쥬?ㅎㅎ
- Tip! 제네릭 이름은 보통 대문자 알파벳 한개를 사용한답니다.
ex) T(type) / V(value) / K(key) ...
제네릭은 타입스크립트에서 너무너무 많이 이용되고 재사용성과 유지보수성을 높여준다!! 😄
'TypeScript' 카테고리의 다른 글
Type Script_10 Utility Type & Type Manipulation (유틸리티 타입 과 유형 조작) (0) | 2021.04.20 |
---|---|
Type Script_09 Type alias와 Interface 차이👀 (0) | 2021.04.16 |
Type Script_07 OOP(객체지향프로그램) (0) | 2021.04.16 |
Type Script_06 타입 추론 & 단언 (Inference & Assertion) (0) | 2021.04.16 |
Type Script_05 Intersection Type (인터섹션 타입) (0) | 2021.04.16 |
댓글