리터럴 타입
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 33번째.
string과 같은 타입은 모든 문자열을 허용하지만, 때로는 몇 가지 정확한 값만 유효할 때가 있습니다. 리터럴 타입(literal type)은 값 자체를 타입으로 사용합니다:
local mode: "dark" = "dark" -- 문자열 "dark"만 허용됩니다
local locked: true = true -- 불리언 true만 허용됩니다단일 값 타입 자체만으로는 단순한 흥미거리일 수 있습니다. 하지만 unions와 결합하면 허용된 값들의 세트를 엄격하게 제어하는 Luau의 가장 유용한 도구 중 하나가 됩니다:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ 타입 오류!이제 "nort" 같은 오타나 "diagonal" 같은 유효하지 않은 값이 편집 중에 바로 잡힙니다. 일반 string을 사용했다면 이러한 오류를 그냥 지나쳐 실행 시점에 가서야 문제가 발생했을 것입니다.
리터럴 타입은 대소문자를 구분하며 정확해야 합니다. 예를 들어 "North"는 "north"와 일치하지 않습니다. 문자열 리터럴이 가장 흔하게 사용되지만, boolean 및 (최신 Luau 버전의) 숫자 리터럴도 동일한 방식으로 동작합니다. 이러한 문자열 리터럴의 unions 패턴은 나중에 다룰 장에서 보게 되겠지만 Luau가 다른 언어의 enum을 대체하는 방식이기도 합니다.
챌린지
쉬움세 개의 리터럴 유니온(literal-union) 타입 별칭을 만드세요:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
이 별칭들을 사용하여 다음을 선언하세요:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
"Moving [direction]"을 반환하는 함수 movePlayer(direction: Direction): string 및 "Game state: [state]"를 반환하는 함수 updateGameState(state: GameState): string을 만드세요.
다음 항목을 각각 한 줄씩 출력하세요:
movePlayer(playerDirection)updateGameState(currentState)selectedDifficulty의 값
직접 해보기
-- 여기에 코드를 작성하세요
-- Direction / GameState / Difficulty를 리터럴 유니온 타입으로 정의
-- playerDirection, currentState, selectedDifficulty를 선언
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- 세 결과를 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.