셰이프 vs. 느슨한 테이블
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 40번째.
이제 record table을 다루는 두 가지 방법이 있습니다. Lua에서 늘 사용해 온 loose 방식과 선언된 형태입니다. 각각 어떤 이점을 제공하는지 잠시 살펴볼 가치가 있습니다.
loose table은 무엇이든 받아들입니다. 이러한 유연성에는 대가가 따릅니다. 필드 이름을 잘못 입력하면(user.nmae) nil을 silently 얻게 됩니다. 필드를 빠뜨리면 버그가 런타임에, 그 빈 곳을 처음 건드리는 코드에서, 훨씬 나중에 드러납니다:
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 UserTypeScript에서 넘어왔다면 Luau에는 interface 키워드가 없다는 점에 유의하세요. 모든 형태는 type이 처리합니다. 또한 "선언 병합"도 없습니다. 같은 스코프에서 같은 이름으로 두 type을 선언하면 오류이므로, 각 형태에는 정확히 하나의 정의만 존재합니다.
Luau의 형태는 구조적입니다. 올바른 type의 올바른 필드를 가진 모든 table은 어디서 또는 어떻게 생성되었는지와 관계없이 일치합니다. 그리고 loose table에도 여전히 쓰임새가 있습니다. 빠른 스크립트와 진정으로 동적인 데이터에는 선언된 형태가 필요하지 않습니다. 하지만 함수 사이에 전달되는 것은 무엇이든 형태를 사용하면 실수가 아직 수정 비용이 적을 때 발견할 수 있습니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
7프로젝트: Typed Task Manager
프로젝트: 태스크 형태 정의하기태스크 추가 함수3타입이 지정된 테이블: 배열과 맵
타입이 지정된 배열요소 추가 및 읽기맵 타입이란?맵 선언 및 접근테이블 순회하기혼합 형태 테이블다차원 타입 배열table.unpack과 가변 인자요약: 배열과 맵6테이블 셰이프 타입 지정
인라인 셰이프 어노테이션셰이프를 위한 타입 별칭선택적 속성셰이프 vs. 느슨한 테이블셰이프 확장하기셰이프에 메서드 추가하기Self와 콜론 메서드요약: 테이블 셰이프 정의하기직접 연습해 보세요: 온라인 Lua 컴파일러