제네릭이 해결하는 문제
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 57번째.
전달받은 값을 그대로 반환하기만 하는 함수, 즉 항등(identity) 함수가 필요하다고 가정해 봅시다. 지금까지 배운 타입만으로는 두 가지 옵션이 있으며, 두 방법 모두 한계가 있습니다.
첫 번째 옵션: 타입별로 별도의 복사본을 작성합니다. 본문은 동일하며, 어노테이션만 다릅니다:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
end새로운 타입이 추가될 때마다 또 다른 복사본이 필요하며, 하나에서 수정된 버그는 모든 복사본에서 수정되어야 합니다. 이는 함수를 작성하여 피하려는 중복과 정확히 일치합니다.
두 번째 옵션: any 타입을 사용해 하나로 합칩니다:
local function echo(value: any): any
return value
end이제 하나의 함수가 모든 것을 처리하지만, 타입 안전성을 포기해야 합니다. echo("hello")를 호출할 때 checker는 더 이상 result가 string이라는 것을 알지 못합니다. 오직 any만 알고 있으므로 자동 완성이 동작하지 않고 타입 에러가 빠져나가게 됩니다. 들어간 것과 나오는 것 사이의 연결 고리가 사라지는 것입니다.
진정으로 원하는 것은 모든 타입에서 작동하면서도 각 호출에서 사용된 타입을 기억하는 함수입니다. 이것이 바로 제네릭(generics)이 제공하는 기능이며, 이번 장의 주제입니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.