본문 바로가기
■ 로블록스 개발 노트/개발일지

[로블록스]#4 - Lua 문법

by Popbox 2025. 12. 29.

[로블록스]#4 - Lua문법

로블록스를 시작하며 가장 걱정됐던 것 중 하나는 언어였다.
C, C++, C#을 써온 입장에서 Lua는 너무 가볍고 약해 보였다.
하지만 직접 써보며 생각이 조금 바뀌었다.


 

 

1. Lua는 “못 만든 언어”가 아니다

Lua는 단순하다.
정확히 말하면 단순하게 설계된 언어다.

클래스도 없고, 타입도 없고, 문법도 최소한만 존재한다.

Lua는 “범용 언어”가 아니라
게임 로직을 빠르게 작성하기 위한 언어다.

 

 

 


2. 변수 선언 – 타입이 없는 게 아니라, 늦게 정해진다

Lua에서는 타입을 선언하지 않는다.

local hp = 100
    

C/C# 개발자에게는 이게 불안하게 느껴진다.

하지만 Lua Python과 같은 동적 타입 언어다.
실행 시점에 타입이 결정된다. 즉,

  • 타입이 없는 게 아니라
  • 컴파일 타임이 아닌
  • 런타임에 결정된다

 

 

 


3. nil – null보다 더 무서운 존재

Lua에서 가장 중요한 키워드는 nil이다.

local data = nil
    

nil은 단순한 null이 아니다.

Unity(C#)에서 null은 '값이 없는 참조' 이고,

메모리와 타입정보가 유지되고 있지만,

Lua에서 nil은
존재하지 않는다”는 의미다.

테이블에서 값이 nil이 되는 순간, 그 키는 완전히 삭제된다.

 

 

 


4. 테이블 = Struct + Dictionary + Array

Lua에는 struct도 없고, class도 없다.

대신 테이블 하나로 모든 걸 해결한다.

local player = {
  hp = 100,
  level = 1,
  items = {"sword", "shield"}
}
    

이 하나의 테이블이 다음 역할을 동시에 한다.

  • Struct
  • Dictionary
  • Array

처음엔 불안하지만, 익숙해지면 생각보다 자유롭다.

 

 

 


5. 함수는 “값”이다

Lua에서 함수는 특별하지 않다.

변수에 담기고, 인자로 전달되고, 여러 값을 반환한다.

  • function 키워드로 선언
  • return은 선택(없으면 nil 반환됨)
  • 타입 선언 안함(Luau에서는 선택적 타입 가능)
local function TakeDamage(amount)
  print(amount)
end
    

이 개념은 델리게이트나 람다에 익숙한 C# 개발자에게는 오히려 자연스럽다.

 

 

 


6. 왜 클래스가 없는가

Lua에는 클래스 문법이 없다.

대신 로블록스는 엔진 레벨에서 객체 구조를 제공한다.

Part, Model, Humanoid 자체가
이미 클래스 역할을 한다.

개발자는 “구조 설계”보다 “행동과 규칙”에 집중하게 된다.

 

 

 


7. Lua 문법 핵심 요약

  • Lua는 가벼운 언어가 아니라 목적이 명확한 언어
  • 동적 타입은 단점이 아니라 속도 선택
  • nil은 “없음” 그 자체
  • 테이블 하나로 대부분의 구조를 만든다

 

 

 


8. 다음 글 예고

다음 글에서는 캐릭터와 Humanoid 구조를 다룰 예정이다.

Unity에서 직접 만들던 캐릭터 시스템을 로블록스에서는 어떻게 기본 제공하는지, 그리고 어디까지 믿고 써도 되는지 정리해본다.

“이걸 내가 안 만들어도 된다고?”
로블록스 캐릭터 시스템의 정체


반응형

댓글