Menu
Coddy logo textTech

셰이프 vs. 느슨한 테이블

Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 40번째.

이제 record table을 다루는 두 가지 방법이 있습니다. Lua에서 늘 사용해 온 loose 방식과 선언된 형태입니다. 각각 어떤 이점을 제공하는지 잠시 살펴볼 가치가 있습니다.

loose table은 무엇이든 받아들입니다. 이러한 유연성에는 대가가 따릅니다. 필드 이름을 잘못 입력하면(user.nmae) nilsilently 얻게 됩니다. 필드를 빠뜨리면 버그가 런타임에, 그 빈 곳을 처음 건드리는 코드에서, 훨씬 나중에 드러납니다:

local user = {name = "Ana", age = 20}
print(user.nmae) -- loose table: silently prints nil

형태를 선언하면 이러한 실수는 런타임에서 편집 시점으로 이동합니다. 작성하는 순간 검사기가 오타를 표시하고, 편집기가 필드 이름을 자동 완성할 수 있으며, type 선언은 table에 무엇이 들어 있는지 보여 주는 문서 역할도 합니다:

type User = {name: string, age: number}
local user: User = {name = "Ana", age = 20}
print(user.nmae) -- ✗ type error: key 'nmae' not found in User

TypeScript에서 넘어왔다면 Luau에는 interface 키워드가 없다는 점에 유의하세요. 모든 형태는 type이 처리합니다. 또한 "선언 병합"도 없습니다. 같은 스코프에서 같은 이름으로 두 type을 선언하면 오류이므로, 각 형태에는 정확히 하나의 정의만 존재합니다.

Luau의 형태는 구조적입니다. 올바른 type의 올바른 필드를 가진 모든 table은 어디서 또는 어떻게 생성되었는지와 관계없이 일치합니다. 그리고 loose table에도 여전히 쓰임새가 있습니다. 빠른 스크립트와 진정으로 동적인 데이터에는 선언된 형태가 필요하지 않습니다. 하지만 함수 사이에 전달되는 것은 무엇이든 형태를 사용하면 실수가 아직 수정 비용이 적을 때 발견할 수 있습니다.

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Luau 소개의 모든 레슨

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