Menu
Coddy logo textTech

타입 단언 (Type Assertions)

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

때로는 Luau의 타입 검사기(type checker)보다 값에 대해 더 많은 것을 알고 있을 때가 있습니다. 예를 들어 any로 타입 지정되었지만 실제로는 사용자 레코드라는 것을 알고 있는 값처럼요. 타입 단언(type assertion)(캐스트(cast)라고도 함)을 사용하면 검사기에게 "나를 믿고 이 값을 이 타입으로 처리해 줘"라고 알릴 수 있습니다. Luau의 캐스트 연산자는 ::입니다:

type User = {id: number, username: string}

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- 체커가 이제 필드를 알게 됩니다

캐스트는 타입 검사기가 믿는 것 변경하며, 런타임에는 아무 작업도 수행하지 않습니다. 값을 결코 변환하지 않습니다: "5" :: any는 여전히 문자열 "5"이며 숫자 5가 아닙니다(실제 변환을 하려면 tonumber를 사용하세요). 그리고 절대 검증하지 않습니다: 잘못된 타입으로 단언하더라도 캐스트 자체는 에러를 발생시키지 않습니다. 단순히 나중에 존재하지 않는 필드에 접근할 때 코드에 오류가 발생할 뿐입니다.

사용해야 할 때: 값이 any(또나 넓은 유니온)로 전달되고 그 형태(shape)를 진정으로 알고 있을 때입니다. 사용하지 말아야 할 때: 이해하지 못하는 타입 에러를 무시하기 위해 사용하는 경우입니다 — 에러는 보통 실제 버그에 대해 알려주는 것이며, 캐스팅으로 무시하는 것은 단지 버그를 숨길 뿐입니다. 런타임에 검증할 수 있을 때는 가급적 실제 검사(다음 레슨의 typeof 가드 등)를 사용하세요.

challenge icon

챌린지

쉬움

유형 정보 없이 외부 소스로부터 도착한 레코드를 처리하는 상황을 시뮬레이션합니다.

  • type User = {id: number, username: string, isActive: boolean}를 선언합니다.
  • data::를 사용하여 User로 캐스팅(cast)하고 문자열 보간법으로 작성된 User [id]: [username] (Active: [isActive])를 반환하는 함수 describeUser(data: any): string을 작성합니다.

시작 코드에는 이미 any 타입으로 지정된 세 개의 raw 레코드가 정의되어 있습니다. 각 레코드에 대해 describeUser를 호출하고 세 가지 결과를 순서대로 출력합니다.

예상되는 첫 번째 줄: User 42: alice_dev (Active: true)

직접 해보기

-- 외부 소스의 원시 레코드: `any` 타입
local rawUser1: any = {id = 42, username = "alice_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
local rawUser3: any = {id = 99, username = "charlie_user", isActive = true}

-- 여기에 코드를 작성하세요
-- 1) User 타입을 선언하세요
-- 2) describeUser(data: any): string — ::로 캐스트하고 메시지를 작성하세요
-- 3) 세 레코드 모두의 설명을 출력하세요
quiz icon실력 점검

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

Luau 소개의 모든 레슨