[TypeScript] Generic Types
안녕하세요 동기 여러분! 오늘은 커스텀 타입의 여섯 번째 시간으로 제네릭 타입에 대해 알아봅시다!
Generic을 영어 사전에 찾아보면 '포괄적인, 총칭의'라는 뜻을 가지고 있다는 사실을 염두에 두고 갑시다!
Generic Types
타입스크립트에서 제네릭 타입은 타입들의 모음을 만드는 방법입니다. 사실 이 방법은 배열 타입 선언(클릭 시 링크)에서 알아본 적이 있는데요, 아래와 같이 생겼습니다.
Array<T>
기억나시나요? Array<T>방법! T는 타입을 말합니다.
※ 제가 헷갈렸던 부분이 여기인데 T는 함수로 치면 매개 변수 같은 역할을 하기 때문에 타입 선언할 때 여기 < > 안에 string이나 number 같은 타입을 하면 에러가 납니다. ㅠ ㅠ T나 다른 문자를 써넣어 주어야 함.
Array 위치에는 개발자가 정한 타입 이름을 넣어 줄 수 있고
T는 다른 문자나 단어로 사용해도 상관은 없지만 (매개 변수처럼) 알아보기 쉽게 하기 위해 T를 사용하겠습니다.
type typeName<T> =
사용 방법
한국, 캐나다, 미국, 아일랜드의 주력 소총을 나타내는 객체를 만들기 위해 타입을 선언해주겠습니다.
type Rifle<T> = {
Korea: [T, T, T, T],
Canada: [T, T],
UnitedStates: [T, T, T, T, T, T],
Ireland: T
};
- 타입을 선언한 코드를 봅시다!
- Rifle이라는 타입의 명을 만들고 <> 안에 T(제네릭 타입의 매개 변수)를 넣어줬습니다.
- 한국의 배열에 타입 3개
- 캐나다의 배열에 타입 2개
- 미국의 배열에 문자 6개 → ㄷㄷ 전 세계 군사력 1위 클라스
- 아일랜드의 배열에 문자 타입 1개를 선언해주었습니다.
-추가-
위에 나온 타입 제네릭 타입 선언 다른 방법
type Rifle<T> = {
Korea: T[],
Canada: [T, T],
UnitedStates: T[],
Ireland: T
};
타입 선언을 마쳤으니 객체를 만들어서 내용을 채워봅시다!
let riflesOfNation: Rifle<string> = {
Korea: [ 'S&T Daewoo K11', 'Daewoo K2', 'Daewoo K1A', 'M16A1'],
Canada: [ 'Diemaco C7', 'Diemaco C8 Carbine'],
UnitedStates: [ 'M14', 'M16A4', 'M4 carbine', 'Hk416(특수 부대용)', 'FN SCAR', 'Mk 14 Mod EBR'],
Ireland: 'Steyr AUG A1'
};
- T(제네릭 타입의 매개 변수)에 string(제네릭 타입의 독립 변수)를 넣어주어서 이제 위 타입 선언 코드에 T가 있던 자리는 모두 string 타입이 와야 합니다.
- 전부 문자 타입으로 내용을 채워 주었습니다.
에러가 나는지 한번 컴파일링 해보겠습니다.
오늘의 느낌
저는 K2, K1, M16 A1 세 가지 소총 다 써봤는데 K1은 양안 사격을 해도 진짜 잘 안 맞더라구요... K2는 상당히 명중률이 좋은 듯! M16 A1은 예비군 훈련 가서 쏴 봤는데 예비군 총기사고로 나라가 들썩인 지 얼마 안돼서 가서 그런지 조교가 아예 총과 제 몸을 다 붙잡고 사격을 하는 바람에 평가가 어렵네요... (조교가 너무 바짝 붙어서 그건 조교가 사격했다고 쳐야 할 듯.)