남의 코드 보면 함수 이름 뒤에 <T> 이런 게 붙어있는데 이게 뭔지 계속 헷갈려서요. 문법은 대충 흉내낼 수 있는데 "이럴 때 제네릭을 써야겠다" 하는 감이 안 잡힙니다.
예를 들어 배열 첫 번째 요소 꺼내는 함수를 만든다고 하면 저는 이렇게 짜거든요.
function first(arr: any[]): any {
return arr[0];
}
근데 이러면 리턴값이 any라서 first(['a','b']) 한 다음에 .toUpperCase() 같은 거 자동완성이 안 뜨더라고요. 문자열인 걸 아는데도요.
제네릭으로 바꾸면 이런 거라고 하던데요.
function first<T>(arr: T[]): T {
return arr[0];
}
여기서 T가 정확히 뭔가요? 제가 어디서 T가 string이라고 정해주는 것도 아닌데 어떻게 알아서 문자열로 되는 건지 이해가 안 돼요. 그냥 아무 값이나 넣으면 그거에 맞춰서 T가 자동으로 바뀌는 개념인가요? 그리고 이걸 실제로 언제 쓰면 좋은지 흔한 예시가 있으면 알려주세요.