Menu
Coddy logo textTech

선택적 속성

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

모든 필드가 항상 존재하는 것은 아닙니다. Lua에서는 테이블에 존재하지 않는 필드를 읽으면 단순히 nil을 반환합니다. 이는 유연하지만 attempt to concatenate a nil value와 같은 버그가 몰래 발생하는 원인이 되기도 합니다.

Luau에서는 형태(shape)에 이를 명시적으로 표현할 수 있습니다. 필드의 타입 뒤에 ?를 붙여 해당 필드가 옵셔널(optional)임을 표시합니다:

type User = {
    name: string,   -- 필수
    email: string?, -- 선택 사항: string 또는 nil
}

local alice: User = {name = "Alice", email = "alice@luau.dev"}
local bob: User = {name = "Bob"} -- ✓ 괜찮음, email은 선택 사항

이전 변수에서 다루었던 것과 같습니다. string?string | nil의 축약어입니다. 이제 동일한 개념이 형태의 개별 필드에 적용됩니다.

옵셔널 필드는 nil일 수 있으므로 사용하기 전에 확인(check)해야 합니다. 클래식한 Lua 패턴이 잘 작동하며, 엄격 모드(strict mode)에서는 검사기(checker)가 조건문 내부에서 타입을 좁혀줍니다:

if bob.email then
    print(`email: {bob.email}`) -- 여기서 email은 문자열입니다
else
    print("no email on file")
end

옵셔널은 "생략될 수 있음"을 의미하며, "아무 타입이나 가능함"을 의미하지 않습니다. 만약 email이 존재한다면, 그것은 여전히 string이어야 합니다.

challenge icon

챌린지

쉬움

다음 조건을 만족하는 User라는 이름의 타입 별칭(type alias)을 작성하세요:

  • string 타입의 name (필수)
  • string? 타입의 email (선택 사항)

두 명의 사용자를 생성하세요:

  • alice — 이름 "Alice", 이메일 "alice@luau.dev"
  • bob — 이름 "Bob", 이메일 없음

User를 매개변수로 받는 printContact 함수를 생성하세요. 사용자에게 이메일이 있으면 [name] - [email]을 출력하고, 그렇지 않으면 [name] - no email을 출력해야 합니다.

그런 다음:

  1. printContact(alice) 호출
  2. printContact(bob) 호출
  3. bob.email == nil의 비교 결과 출력

직접 해보기

-- 여기에 코드를 작성하세요
-- 1) 선택적 email 필드가 있는 User 타입을 정의하세요
-- 2) alice(email 있음)와 bob(없음)을 생성하세요
-- 3) nil 검사가 있는 printContact를 작성하세요
-- 4) 두 사용자에 대해 호출한 다음 bob.email == nil을 출력하세요
quiz icon실력 점검

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

Luau 소개의 모든 레슨