Menu
Coddy logo textTech

리터럴 유니온 Enum 사용하기

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

리터럴 유니언은 function 매개변수로 사용할 때 진가를 발휘합니다. 매개변수에 유니언으로 타입을 지정하면, 체커가 해당 function이 유효한 멤버로만 호출되도록 보장합니다:

type Direction = "up" | "down" | "left" | "right"

local function move(direction: Direction)
    print(`Moving {direction}...`)
end

move("left")  -- ✓
move("north") -- ✗ 타입 오류: Direction이 아님

function 내부에서는 if/elseif 연쇄를 사용해 members를 빠짐없이 처리하세요. 타입이 input을 네 가지 값으로 제한하므로, 세 가지를 확인하고 else가 마지막 하나를 처리하도록 하면 모든 경우를 다루게 됩니다:

local function describe(direction: Direction): string
    if direction == "up" then
        return "Going upward"
    elseif direction == "down" then
        return "Going downward"
    elseif direction == "left" then
        return "Turning left"
    else
        return "Turning right"
    end
end

한 가지 주의할 점이 있습니다. 외부에서 들어오는 문자열, 예를 들어 io.read()는 plain string 타입으로 지정됩니다. 사용자가 무엇을 입력할지 체커가 알 수 없기 때문입니다. 앞에서 배운 :: cast는 해당 값을 여러분의 열거형 타입으로 취급하도록 체커에 알려 줍니다:

local direction = io.read() :: Direction

cast는 검사 결과가 아니라 약속입니다. 런타임에는 어떤 것도 input을 검증하지 않습니다. 실제 운영 코드에서는 먼저 검증하겠지만, 여기서는 타입이 지정된 function이 사용자 input을 깔끔하게 받을 수 있도록 해 줍니다.

challenge icon

챌린지

쉬움

Direction 멤버 "up", "down", "left""right"를 포함하는 리터럴 유니온 타입을 만드세요.

direction: Direction을 인수로 받고 Moving [direction]...을 출력하는 move 함수를 만드세요.

direction: Direction을 인수로 받고 string을 반환하며, if/elseif/else를 사용해 모든 멤버를 처리하는 getMovementDescription 함수를 만드세요:

  • "up"Going upward
  • "down"Going downward
  • "left"Turning left
  • "right"Turning right

io.read()를 사용해 사용자로부터 한 줄을 읽고, ::를 사용해 이를 Direction으로 캐스팅하세요. 그런 다음:

  1. direction을 사용해 move를 call하세요.
  2. 같은 direction에 대한 getMovementDescription의 결과를 print하세요.

직접 해보기

-- 여기에 코드를 작성하세요
-- 1) Direction 타입 정의
-- 2) move와 getMovementDescription 작성 (if/elseif/else)
-- 3) 입력 읽기: local direction = io.read() :: Direction
-- 4) move 호출 후 설명 출력
quiz icon실력 점검

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

Luau 소개의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러