generic 기본 선언
사용
항시 드는 생각이지만 프로그래밍에서 명명은 정말 중요하기에
이 언어를 만드는 기관들은 이름을 참 잘지어준다.
generic은 말 그대로 보편적인 뜻을 가진다.
함수의 보편성을 만들어주는 variable한 타입을 가리킨다.
코드를 보며 generic의 진가를 알아보자.
function identity(arg:number):number{
return arg;
}
// return type = number
// 만약 (arg:any):any의 경우 return type = any
위 코드는 숫자를 받고 숫자를 리턴하는 것 밖에 못한다.
function identity2<T>(arg:T):T{
return arg;
}
느낌이 팍 온다면 좋겠다. 소괄호 앞은 generic을 사용할 것인지를 선언하는 선언부다.
인자에 선언한 generic 인자를 넣어주고 return 값은 선택이지만 확실한게 좋으니
넣어주도록 하자.
위 코드는 이제 이런 뜻이 된다. identity(1)은 generic변수가 유저의 입력값의 타입을
스냅샷으로 기억하고 그 값의 타입을 T에 치환해 대입해준다는 뜻이 된다.
이로써 함수의 확장성은 매우 커졌다고 할 수 있다.
타입을 확인해보면 유저가 입력한 타입을 그대로 반환해준다는 것을 알 수 있다.
생성해놓은 generic 함수를 사용해보자. 방법은 크게 두가지 방법으로
선언적 사용과 추론적 사용법이 있다.
function identity2<T>(arg:T):T{
return arg;
}
console.log(identity2<string>('generic is good')); // 선언적 사용
console.log(identity2('svelt is good?')); // 추론적 사용
추론적 사용은 tsc가 arg값을 읽어 타입을 추론하고 generic에 대입하는 것이다.
보통 후자를 많이 사용하게 된다. tsc가 하는 일을 굳이 개발자가 할 필요는 없다는 것이
이유이다.