Luau와 C# 비교

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

Roblox는 Luau 프로그래밍 언어를 사용합니다. 다음 코드 샘플과 표는 C#과 Luau의 구문 간의 차이점을 나타냅니다.

줄 끝

Luau에서는 세미콜론이 필요하지 않지만, 문법을 깨뜨리지는 않습니다.

예약어

다음 표에는 Luau의 예약어가 C#의 동등한 예약어에 매핑되어 있습니다. 모든 C# 예약어가 포함되어 있지 않음을 유의하세요.

LuauC#
and
breakbreak
dodo
ifif
elseelse
elseifelse if
then
end
truetrue
falsefalse
forfor 또는 foreach
function
inin
local
nilnull
not
or
repeat
returnreturn
until
whilewhile

주석

Luau에서의 주석

-- 한 줄 주석
--[[ 결과 출력:
블록 주석
--]]
C#에서의 주석

// 한 줄 주석
/*
블록 주석
*/

문자열

Luau에서의 문자열

-- 여러 줄 문자열
local multiLineString = [[이 문자열은,
출력되면
여러 줄에 걸쳐 보입니다]]
-- 연결
local s1 = "이 문자열은 "
local s2 = "두 부분으로 만들어졌습니다."
local endString = s1 .. s2
C#에서의 문자열

// 여러 줄 문자열
string multiLineString1 = "이 문자열은,\n출력되면\n여러 줄에 걸쳐 보입니다.";
string multiLineString2 = @"이 문자열은,
출력되면
여러 줄에 걸쳐 보입니다";
// 연결
string s1 = "이 문자열은 ";
string s2 = "두 부분으로 만들어졌습니다.";
string endString = s1 + s2;

테이블

Luau에서의 테이블에 대해 더 알아보려면 테이블을 참조하세요.

딕셔너리 테이블

Luau에서는 테이블을 C#과 마찬가지로 딕셔너리로 사용할 수 있습니다.

Luau에서의 딕셔너리 테이블

local dictionary = {
val1 = "this",
val2 = "is"
}
print(dictionary.val1) -- 'this' 출력
print(dictionary["val1"]) -- 'this' 출력
dictionary.val1 = nil -- 테이블에서 'val1' 제거
dictionary["val3"] = "a dictionary" -- 'val3'를 덮어쓰거나 새로운 키-값 쌍을 설정
C#에서의 딕셔너리 테이블

Dictionary dictionary = new Dictionary()
{
{ "val1", "this" },
{ "val2", "is" }
};
Console.WriteLine(dictionary["val1"]); // 'this' 출력
dictionary.Remove("val1"); // 딕셔너리에서 'val1' 제거
dictionary["val3"] = "a dictionary"; // 'val3'를 덮어쓰거나 새로운 키-값 쌍을 설정
dictionary.Add("val3", "a dictionary"); // 새로운 키-값 쌍 생성

숫자 인덱스가 있는 테이블

Luau에서는 테이블을 C#과 마찬가지로 배열로 사용할 수 있습니다. 인덱스는 Luau에서 1부터 시작하고 C#에서는 0부터 시작합니다.

Luau에서의 숫자 인덱스 테이블

local npcAttributes = {"강력한", "지능적인"}
print(npcAttributes[1]) -- '강력한' 출력
print(#npcAttributes) -- 목록의 크기 출력
-- 목록에 추가
table.insert(npcAttributes, "겸손한")
-- 또 다른 방법...
npcAttributes[#npcAttributes+1] = "겸손한"
-- 목록의 처음에 삽입
table.insert(npcAttributes, 1, "용감한")
-- 주어진 인덱스에서 항목 제거
table.remove(npcAttributes, 3)
C#에서의 숫자 인덱스 테이블

List npcAttributes = new List{"강력한", "지능적인"};
Console.WriteLine(npcAttributes[0]); // '강력한' 출력
Console.WriteLine(npcAttributes.Count); // 목록의 크기 출력
// 목록에 추가
npcAttributes.Add("겸손한");
// 또 다른 방법...
npcAttributes.Insert(npcAttributes.Count, "겸손한");
// 목록의 처음에 삽입
npcAttributes.Insert(0, "용감한");
// 주어진 인덱스에서 항목 제거
npcAttributes.Remove(2);

연산자

조건 연산자

연산자LuauC#
같음====
초과>>
미만<<
이상>=>=
이하<=<=
같지 않음~=!=
그리고and&&
또는or||

산술 연산자

LuauC#
덧셈++
뺄셈--
곱셈**
나눗셈//
모듈로%%
지수^**

변수

Luau에서는 변수를 선언할 때 유형을 지정하지 않습니다. Luau 변수는 접근 수정자를 가지지 않지만 가독성을 위해 "private" 변수를 밑줄로 접두사를 붙일 수 있습니다.

Luau에서의 변수

local stringVariable = "값"
-- "공개" 선언
local variableName
-- "프라이빗" 선언 - 같은 방식으로 파싱됩니다
local _variableName
C#에서의 변수

string stringVariable = "값";
// 공개 선언
public string variableName;
// 프라이빗 선언
string variableName;

범위

Luau에서는 doend 키워드 내에 논리를 중첩하여 함수 또는 클래스보다 더 좁은 범위에 변수를 작성할 수 있습니다. 이는 C#의 중괄호 {}와 유사합니다. 더 자세한 내용은 범위를 참조하세요.

Luau에서의 범위

local outerVar = '바깥 범위 텍스트'
do
-- 'outerVar' 수정
outerVar = '내부 범위 수정 텍스트'
-- 로컬 변수 도입
local innerVar = '내부 범위 텍스트'
print('1: ' .. outerVar) -- "1: 내부 범위 수정 텍스트" 출력
print('2: ' .. innerVar) -- "2: 내부 범위 텍스트" 출력
end
print('3: ' .. outerVar) -- "3: 내부 범위 수정 텍스트" 출력
-- 여기서 'innerVar'를 출력하려고 하면 실패합니다.
C#에서의 범위

var outerVar = "바깥 범위 텍스트";
{
// 'outerVar' 수정
outerVar = "내부 범위 수정 텍스트";
// 로컬 변수 도입
var innerVar = "내부 범위 텍스트";
Console.WriteLine("1: " + outerVar); // "1: 내부 범위 수정 텍스트" 출력
Console.WriteLine("2: " + innerVar); // "2: 내부 범위 텍스트" 출력
}
Console.WriteLine("3: " + outerVar); // "3: 내부 범위 수정 텍스트" 출력
// 여기서 'innerVar'를 출력하려고 하면 실패합니다.

조건문

Luau에서의 조건문

-- 하나의 조건
if boolExpression then
doSomething()
end
-- 여러 조건
if not boolExpression then
doSomething()
elseif otherBoolExpression then
doSomething()
else
doSomething()
end
C#에서의 조건문

// 하나의 조건
if (boolExpression) {
doSomething();
}
// 여러 조건
if (!boolExpression) {
doSomething();
}
else if (otherBoolExpression) {
doSomething();
}
else {
doSomething();
}

조건 연산자

Luau에서의 조건 연산자

local max = if x > y then x else y
C#에서의 조건 연산자

int max = (x > y) ? x : y;

루프

Luau에서의 루프에 대해 더 알아보려면 제어 구조를 참조하세요.

while 및 repeat 루프

Luau에서의 while 및 repeat 루프

while boolExpression do
doSomething()
end
repeat
doSomething()
until not boolExpression
C#에서의 while 및 repeat 루프

while (boolExpression) {
doSomething();
}
do {
doSomething();
} while (boolExpression);

for 루프

Luau에서의 일반 for 루프

-- 순방향 루프
for i = 1, 10 do
doSomething()
end
-- 역방향 루프
for i = 10, 1, -1 do
doSomething()
end
C#에서의 일반 for 루프

// 순방향 루프
for (int i = 1; i <= 10; i++) {
doSomething();
}
// 역방향 루프
for (int i = 10; i >= 1; i--) {
doSomething();
}
Luau에서의 테이블에 대한 for 루프

local abcList = {"a", "b", "c"}
for i, v in ipairs(abcList) do
print(v)
end
local abcDictionary = { a=1, b=2, c=3 }
for k, v in pairs(abcDictionary) do
print(k, v)
end
C#에서의 목록에 대한 for 루프

List<string> abcList = new List<string>{"a", "b", "c"};
foreach (string v in abcList) {
Console.WriteLine(v);
}
Dictionary<string, int> abcDictionary = new Dictionary<string, int>
{ {"a", 1}, {"b", 2}, {"c", 3} };
foreach (KeyValuePair<string, int> entry in abcDictionary) {
Console.WriteLine(entry.Key + " " + entry.Value);
}

Luau는 또한 일반화된 반복을 지원하여 테이블 작업을 더욱 간편하게 만듭니다.

함수

Luau에서의 함수에 대해 더 알아보려면 함수를 참조하세요.

일반 함수

Luau에서의 일반 함수

-- 일반 함수
local function increment(number)
return number + 1
end
C#에서의 일반 함수

// 일반 함수
int increment(int number) {
return number + 1;
}

가변 인수

Luau에서의 가변 인수

-- 가변 인수
local function variableArguments(...)
print(...)
end
C#에서의 가변 인수

// 가변 인수
void variableArguments(params string[] inventoryItems) {
for (item in inventoryItems) {
Console.WriteLine(item);
}
}

이름 붙은 인수

Luau에서의 이름 붙은 인수

-- 이름 붙은 인수
local function namedArguments(args)
return args.name .. "'s 생일: " .. args.dob
end
namedArguments{name="Bob", dob="4/1/2000"}
C#에서의 이름 붙은 인수

// 이름 붙은 인수
string namedArguments(string name, string dob) {
return name + "'s 생일: " + dob;
}
namedArguments(name: "Bob", dob: "4/1/2000");

try-catch 구조

Luau에서의 try/catch 구조

local function fireWeapon()
if not weaponEquipped then
error("장비된 무기가 없습니다!")
end
-- 진행...
end
local success, errorMessage = pcall(fireWeapon)
if not success then
print(errorMessage)
end
C#에서의 try/catch 구조

void fireWeapon() {
if (!weaponEquipped) {
// 사용자 정의 예외 사용
throw new InvalidWeaponException("장비된 무기가 없습니다!");
}
// 진행...
}
try {
fireWeapon();
} catch (InvalidWeaponException ex) {
// 오류가 발생했습니다.
}
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.