Menu
Coddy logo textTech

인터섹션 타입

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

유니온은 값이 하나의 타입 또는 다른 타입이라고 말합니다. 교차 타입(Intersection types)은 반대 방향을 가리킵니다. 앰퍼샌드 &는 테이블 형태들을 결합하여 모든 부분의 모든 `fields`를 가지는 타입을 만듭니다:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- Person은 두 필드를 모두 가져야 합니다
local user: Person = {
    name = "Alice",
    age = 25,
}

age를 빠뜨리면 체커가 경고합니다 — 교차 타입은 "AND"이며, 절대 골라잡는 것이 아닙니다. 이를 통해 작은 재사용 가능한 조각들로 큰 형태를 구축할 수 있습니다. 개별 관심사에 맞춰 `focused` 타입을 정의한 다음, 필요할 때 `together`로 결합하세요:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Luau에서 주의할 점 하나: 기본 타입(primitives)이 아닌 테이블 형태(그리고 `function` 타입)를 교차하세요. number & string과 같은 것은 어떤 값도 동시에 둘 다 될 수 없으므로 의미가 없습니다. "이 형태에 저 형태를 더하고" 싶을 때, &가 바로 사용하는 도구입니다.

런타임에서 Person은 물론 일반 Lua 테이블일 뿐입니다 — 교차 타입은 체커만을 위해 존재합니다.

challenge icon

챌린지

쉬움

두 개의 타입 별칭을 만드세요: name: string 필드를 가진 HasNameage: number 필드를 가진 HasAge.

HasName & HasAge 교차 타입으로 Person을 만드세요.

email: string 필드를 가진 HasEmail을 만들고, 세 가지 모두의 교차 타입인 Employee를 만드세요: HasName & HasAge & HasEmail.

다음과 같이 선언하세요:

  • name"Alice"이고 age25user: Person
  • name"Bob", age30, email"bob@company.com"worker: Employee

"Name: [name], Age: [age]"를 반환하는 displayPerson(person: Person): string"Name: [name], Age: [age], Email: [email]"을 반환하는 displayEmployee(employee: Employee): string을 만드세요.

displayPerson(user)displayEmployee(worker)를 줄바꿈하여 출력하세요.

직접 해보기

-- 여기에 코드를 작성하세요
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- user와 worker를 선언하고, 두 개의 display 함수를 작성하세요,
-- displayPerson(user)와 displayEmployee(worker)를 출력하세요
quiz icon실력 점검

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

Luau 소개의 모든 레슨