Menu
CoddyTech

제네릭이 해결하는 문제

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 타입만 알 수 있으므로 자동 완성이 작동하지 않고 타입 오류도 놓치게 됩니다. 입력으로 들어간 값과 출력으로 나오는 값 사이의 연결이 사라진 것입니다.

정말 필요한 것은 모든 타입에서 작동하면서도 각 호출에서 어떤 타입이 사용되었는지 기억하는 함수입니다. 바로 이것을 제공하는 것이 제네릭이며, 이 장에서는 제네릭을 다룹니다.

challenge icon

챌린지

쉬움

any 버전의 echo가 무엇을 잊는지 확인해 보세요.

  1. value를 반환하는 local function echo(value: any): any를 작성하세요.
  2. echo("hello")를 local result에 저장하세요.
  3. result를 출력한 다음 typeof(result)를 출력하세요.

코드 실행을 누르세요. 출력에 hello와 string이 표시됩니다.

직접 해보기

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) result와 typeof(result)를 출력

Luau 소개의 모든 레슨

직접 연습해 보세요: 온라인 Luau 컴파일러