스택 자료구조를 TypeScript로 구현한다고 할 때, any 타입을 사용하여 구현하면 저장되도 있는 자료의 타입이 모두 같지 않다는 문제가 발생하게 되는데… 스택에서 자료를 추출하는 경우 런타임에서 항상 타입 검사를 해줘야 하는 번거로움이 있기 때문이다.
Use Generic
function useGeneric<T, U>(a: T, b: U):[ T, U ]{// 2가지의 타입변수(2번째 변수는 알파벳 순서대로 사용해도 되고 마음대로 사용해도 된다.)return[ a, b ];}// 함수 사용법
useGeneric<string,number>('1',1);// [ '1', 1 ]
useGeneric<number,number>(1,1);// [ 1, 1 ]
상속된 타입 변수
function getFirst<T extendsStack<U>, U>(container: T): U {// 입력받은 스택의 첫번째 요소를 반환하는 함수const item = container.pop();
container.push(item);return item;}
getFirst<Stack<number>,number)(numberStack);
getFirst<number,number>(1);// Type 'number' does not satisfy the constraint 'Stack<number>'.// 첫 번째 타입으로 스택, 혹은 스택을 상속한 타입이 아닌 다른 타입을 사용하면 에러 발생
정리
클래스명 뒤에 붙는 <T>는 제네릭(추상적 타입)을 사용하겠다는 의미로 사용된다.
T 대신 다른 이름을 사용하는 것도 가능하다. 일반적으로는 T(Type의 약자) 또는 U를 많이 사용함.
Generic을 사용하므로써, 컴파일러가 리턴하는 타입을 알 수 있게 된다. 즉, 컴파일 시점에 에러를 찾아낼 수 있다.
댓글
댓글 쓰기