Menu
Coddy logo textTech

셰이프 확장하기

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

관련된 셰이프들은 종종 필드를 공유합니다. 모든 AdminUser이기도 합니다. 공유되는 필드를 두 선언에 모두 복사해 넣으면 나중에 서로 달라질 위험이 있습니다.

별칭을 결합할 때 교집합 연산자 &를 접해 보셨을 것입니다. 이는 셰이프에 대해서도 완전히 동일하게 작동합니다. A & B는 "A의 모든 것 그리고 B의 모든 것을 가짐"을 의미합니다:

type User = {name: string, age: number}
type Admin = User & {level: number}

-- Admin은 이제 name, age 그리고 level이 필요합니다
local root: Admin = {name = "Root", age = 35, level = 9}

TypeScript에서는 인터페이스를 위해 별도의 extends 키워드가 필요한 반면, Luau에서는 새로운 것이 전혀 필요 없습니다 — 교집합이 이미 그 역할을 수행합니다. 여러 부분을 연결할 수도 있습니다:

type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}

&|와 혼동하지 마세요. 유니온 A | B는 둘 중 하나의 셰이프인 반면, 교집합 A & B는 두 셰이프를 동시에 모두 만족해야 합니다. 그리고 Admin은 모든 User 필드를 가지고 있으므로, Admin 값은 User가 예상되는 모든 곳에 전달될 수 있습니다.

challenge icon

챌린지

쉬움

다음 타입 별칭(type alias)들을 생성하세요:

  • Employeeid (number), name (string), department (string)
  • ManagerEmployee에 (&를 통해) teamSize (number)가 확장된 타입
  • Contactemail (string)
  • DeveloperEmployee, Contact, 그리고 {yearsExperience: number}의 교집합(intersection)

다음 변수들을 생성하세요:

  • Manager 타입의 teamLead — id 101, name "Alice Johnson", department "Engineering", teamSize 8
  • Developer 타입의 dev — id 102, name "Bob Smith", department "Engineering", email "bob@company.com", yearsExperience 5

Manager를 인자로 받아 [name] manages [teamSize] people을 반환하는 함수 getManagerSummary를 생성하세요.

다음 내용을 각각 한 줄씩 출력하세요:

  1. getManagerSummary(teamLead)의 결과
  2. dev에 대한 [name] has [yearsExperience] years of experience
  3. teamLead의 department
  4. dev의 email

직접 해보기

-- 여기에 코드를 작성하세요
-- 1) Employee를 정의한 다음, &를 사용하여 Manager / Contact / Developer를 정의하세요
-- 2) teamLead와 dev를 생성하세요
-- 3) getManagerSummary를 작성하세요
-- 4) 요청된 네 줄을 출력하세요
quiz icon실력 점검

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

Luau 소개의 모든 레슨