일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Logrus
- notification system
- 대규모 시스템 설계
- golang
- 디자인패턴
- AWS
- Intellij
- 티스토리챌린지
- 사설 ip
- go
- cosine similarity metric
- http 413
- apollo router
- Buffered channel
- 배포 프로세스
- 윈도우키보드
- 오블완
- goland
- UnBuffered channel
- Kubernetes
- intellij ide
- m4 pro
- kube-prometheus-stack
- 배포 파이프라인
- gitops
- Infra
- GoF
- 코사인 유사성 메트릭스
- elasticsearch
- body size
Archives
- Today
- Total
Fall in IT.
Typescript Generic이란? 본문
반응형
안녕하세요.
오늘은 Typescript뿐만 아니라 정적타입 언어에서 자주 사용되는 Generic에 대해서 알아보도록 하겠습니다.
Generic이란?
- Generic은 어떤 클래스 혹은 함수에서 사용할 타입을 그 함수나 클래스를 사용할 때 결정하는 프로그래밍 기법을 말한다.
- 기본적으로 Java와 같은 정적 타입의 언어는 클래스 또는 함수를 선언하는 시점에서 매개변수 또는 리턴 타입을 지정해야 한다.이때, Generic을 사용하면 범용적인 매개변수 또는 리턴타입을 지정할 수 있다.
Javascript에서는 Generic이 없는 이유
- Javascript는 원래 타입 선언이 필요하지 않고, 런타임 시점에 에러가 발생하기 때문에 Generic이 필요하지 않다.
Generic을 사용하는 이유
- Stack 자료구조 예제
Generic 사용 전)
class Stack { private data: any[] = []; public constructor() { } private push (item: any): void { this.data.push(item); } private pop(): any { return this.data.pop(); } } // 사용 let stack = new Stack(); stack.push(1); stack.push(2); stack.pop().substr(0); // Error! (type을 알 수 없다)
Generic 사용 후)
class Stack<T> {
private data: T[] = [];
public constuctor() { }
private push(item: T): void
{
this.data.push(item);
}
private pop(): T { return this.data.pop();
}
} // 사용 let stack = new Stack<number>(); stack.push(1); stack.push(2); stack.pop().substr(0); // Compile Error! (컴파일 시점에 에러를 감지) let stack02 = new Stack<string>(); stack.push("abc"); stack.push("def"); stack.pop().substr(0); // Ok!
정리
- 클래스명 뒤에 붙는 **<T>**는 제네릭(추상적 타입)을 사용하겠다는 의미로 자주 사용됩니다.
- T 대신 다른 이름을 사용하는 것도 가능합니다. 관용적으로 T(Type의 약자) 또는 U를 많이 사용합니다.
- Generic을 사용하므로써, 컴파일러가 리턴하는 타입을 알 수 있게 됩니다. 즉, 컴파일 시점에 에러를 찾아낼 수 있습니다.
Generic 예제코드 1)
// Generic 사용 전 function toPair(a: any, b: any): [any, any] { return [a, b]; } // Generic 사용 후 function toPair(T: any, U: any): [T, U] { return [T, U]; } // 사용 toPair<string, number>("abc", 123); //return ["abc", 123]
Generic 예제코드 2)
function getFirst<T extends Stack<U>, U>(container: T): U { let item = container.pop(); container.push(item); return item; }
참조
모두 즐거운 코딩하세요~
반응형
'프로그래밍언어 > Javascript & Typescript' 카테고리의 다른 글
Javascript every 메소드 사용하기 (1) | 2018.11.21 |
---|---|
Typescript Partial, Required, Pick 사용방법 (1) | 2018.09.17 |
자바스크립트 명시적 바인딩 사용하기(call, apply, bind) (0) | 2018.07.21 |
자바스크립트 메모이제이션(memoization) 사용하기 (0) | 2018.07.10 |
자바스크립트 최대값/최소값 구하기 (0) | 2018.06.26 |
Comments