제네릭이 해결하는 문제
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 61번째.
전달한 값을 그대로 반환하는 함수, 즉 항등 함수가 필요하다고 상상해 보세요. 지금까지 배운 타입으로는 두 가지 방법이 있지만, 둘 다 불편합니다.
첫 번째 방법은 타입마다 별도의 복사본을 작성하는 것입니다. 함수 본문은 같고 어노테이션만 다릅니다.
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")를 호출하면 검사기는 결과가 문자열이라는 사실을 더 이상 알지 못합니다. any 타입만 알 수 있으므로 자동 완성이 작동하지 않고 타입 오류도 놓치게 됩니다. 입력으로 들어간 값과 출력으로 나오는 값 사이의 연결이 사라진 것입니다.
정말 필요한 것은 모든 타입에서 작동하면서도 각 호출에서 어떤 타입이 사용되었는지 기억하는 함수입니다. 바로 이것을 제공하는 것이 제네릭이며, 이 장에서는 제네릭을 다룹니다.
챌린지
쉬움any 버전의 echo가 무엇을 잊는지 확인해 보세요.
value를 반환하는local function echo(value: any): any를 작성하세요.echo("hello")를local result에 저장하세요.result를 출력한 다음typeof(result)를 출력하세요.
코드 실행을 누르세요. 출력에 hello와 string이 표시됩니다.
직접 해보기
-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) result와 typeof(result)를 출력
Luau 소개의 모든 레슨
4함수 다루기
매개변수와 반환값의 타입 지정익명 함수의 타입 지정아무것도 반환하지 않는 함수선택적 매개변수기본 매개변수 값불리언 기본값가변 인자 함수함수 타입 정의하기복습: 타입이 지정된 함수직접 연습해 보세요: 온라인 Luau 컴파일러