언어 — 어휘 규약

언어 — 어휘 규약 (The Language — Lexical Conventions)

루아의 소스 코드는 텍스트(텍스트 파일 또는 문자열)로 작성돼요. 루아는 소스 코드를 처리할 때 문자 집합을 가정하지 않고, 문자들을 "바이트"의 연속으로 취급해요. 다만 이름(식별자)을 비롯해 문자들이 구분 기호(delimiter)와 결합하는 방식에 몇 가지 규칙이 있어요.

문자 집합 (Character set)

루아가 처리하는 문자는 바이트(code point)로 해석돼요. 루아는 UTF-8과 같은 특정 인코딩을 강제하지 않지만, 소스의 문자열 리터럴은 문자 그대로 유지돼요. 따라서 소스 파일에 어떤 인코딩의 텍스트를 넣든 그대로 값에 보존돼요.

식별자 (Names/Identifiers)

이름(식별자)은 문자, 숫자, 밑줄(_)의 연속으로 이루어지며, 숫자로 시작할 수 없어요. 즉 식별자는 문자 또는 밑줄로 시작해야 해요. 이름은 대소문자를 구분해요 (case-sensitive).

i
j
i10
_ij
aSomewhatLongName
_23   -- 유효한 식별자 (숫자로 시작하지 않으므로)

다음은 루아의 예약어(reserved words) 로, 식별자로 사용할 수 없어요.

and     break     do      else    elseif
end     false     for     function  goto
if      in        local   nil     not
or      repeat    return  then    true
until   while

접두사 _로 시작하는 이름(_VERSION 등)은 전역 변수로 예약되지는 않았지만, 일반적으로 특별한 용도를 위해 남겨둬요.

주석 (Comments)

또한 루아의 주석은 --로 시작해요.

  • 짧은 주석(short comment): -- 다음 줄 끝까지. --[[로 시작하지 않으면 줄 주석이에요.
  • 긴 주석(long comment): --[[ ... ]] 형태로 여러 줄을 차지할 수 있어요.
-- 줄 주석
--[[
  여러 줄에 걸친
  긴 주석
]]

리터럴 상수 (Literal constants)

루아에는 여러 종류의 리터럴 상수가 있어요: 숫자(numeric) 리터럴, 문자열(string) 리터럴, 그리고 논리값(boolean) true/falsenil 이에요.

숫자 리터럴 (Numeric constants)

숫자 상수는 소수점 형태이거나 지수 형태일 수 있어요. 정수 리터럴과 실수 리터럴이 모두 허용돼요. 다음은 몇 가지 예시예요.

3         3.0      3.1416
314.16e-2  0.31416E1  0xff    0x56
  • 0x 접두사는 16진수(hexadecimal)를 나타내요.
  • 16진수 리터럴에 정수 부분과 소수 부분을 나누는 .을 쓸 수 있고, p(또는 P)와 지수로 2의 거듭제곱을 나타낼 수 있어요. 예: 0x1p-2는 0.25.
  • 배정밀도 부동소수점으로 표현 불가능한 소수는 가장 가까운 값으로 반올림돼요.
  • 산술 오버플로로 너무 큰 실수 리터럴은 오류를 내요.
  • 정수 리터럴로 표현 가능한 값은 정수 타입으로, 아니면 실수 타입으로 저장돼요.

문자열 리터럴 (String literals)

문자열 리터럴은 큰따옴표(")로 감싸거나 작은따옴표(')로 감싸요. 둘 사이에는 동작 차이가 없어요.

"a line"
'another line'

문자열 안에는 여러 줄에 걸친 문자열을 위해 긴 괄호(long bracket)를 쓸 수도 있어요. [[]] 사이, 또는 [==[ ... ]==] 형태로 여러 줄 문자열을 만들 수 있어요.

[[
  첫 줄
  둘째 줄
]]

긴 괄호 안에서는 이스케이프 시퀀스가 해석되지 않고 문자 그대로 유지돼요.

이스케이프 시퀀스(Escape sequences): 문자열 안에서 백슬래시(\) 뒤에 오는 문자는 특별한 의미를 가질 수 있어요.

이스케이프 의미
\a 벨(bell)
\b 백스페이스
\f 폼피드
\n 새 줄(줄바꿈)
\r 캐리지 리턴
\t 가로 탭
\v 세로 탭
\\ 백슬래시 자체
\" 큰따옴표
\' 작은따옴표
\newline 줄바꿈(연속 줄) — 다음 줄의 앞 공백을 무시하고 한 줄로 연결
\ddd 십진수 ddd에 해당하는 바이트 (최대 3자리)
\xXX 16진수 XX에 해당하는 바이트
\u{XXX} 유니코드 코드 포인트 XXX

문자열은 원하는 만큼 길 수 있고, \ddd(최대 3자리) 이스케이프는 0~255 범위만 표현할 수 있어요. \u{...}는 유니코드 코드 포인트를 UTF-8 인코딩으로 변환하는 데 쓰여요.

출처: 어휘 규약 (Lexical Conventions)

본문

프로그래밍 관례

식별자에서 특별한 접두사 이외에는 프로그래머가 자유롭게 이름을 지어요. 다만 밑줄(_)로 시작하는 이름은 루아의 전역 시스템 이름(예: _G, _VERSION)으로 예약하는 게 관례예요.

연속 줄(Line continuation)

백슬래시 바로 다음에 실제 줄바꿈이 오면, 루아는 그 백슬래시와 줄바꿈을 "단일 공백"으로 단순화해요. 이는 긴 문자열 리터럴을 여러 줄로 나누어 쓸 때 유용해요.

더 알아보기