함수

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

함수코드 블록으로, 명령에 따라 여러 번 실행할 수 있습니다. 또한 이를 이벤트에 연결하거나 콜백으로 지정할 수 있습니다.

기본 함수

함수 정의에는 다음이 포함됩니다:

  • 함수의 범위: 전역 또는 local (이름을 재할당할 수 없는 지역 함수의 경우 const).
  • function 키워드.
  • camelCase로 된 함수 이름.
  • 괄호(()) 안의 함수 매개변수.
  • 함수의 코드 블록 또는 "본문".
  • end 키워드.

함수의 본문은 함수를 호출할 때 실행됩니다. 함수를 호출하려면 함수 이름 뒤에 괄호를 입력합니다. 반환 값을 수용할 변수를 정의하거나 변수 대신 반환 값을 사용할 수 있습니다.

-- 이 함수는 매개변수가 없고 nil을 반환합니다
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- 반환 없이 함수 호출
addOneAndTwo() -- 3

매개변수

매개변수는 함수를 사용할 수 있도록 제공하는 변수이며, 함수의 범위 내에서만 사용됩니다. 기본적으로 함수는 매개변수가 없습니다. 함수가 예상보다 더 많은 매개변수로 호출되면, Luau는 추가 매개변수를 무시합니다. 함수가 예상보다 적은 매개변수로 호출되면, Luau는 모든 누락된 매개변수에 대해 nil을 전달합니다.

-- 이 함수는 두 개의 매개변수: num1과 num2를 가집니다
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- 숫자와 nil에 대한 산술 수행 시도

반환

함수의 본문에서 return 키워드는 계산 결과를 반환합니다. 하나의 함수에서 여러 값을 반환할 수 있습니다. return은 함수 실행을 종료하며, Luau는 return 문 뒤에 end 키워드가 따라와야 한다고 기대하므로, return 명령과 end 명령 사이에 코드를 작성하면 오류가 발생합니다.

-- 이 함수는 하나의 반환 값을 반환합니다
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- 이 함수는 여러 값을 반환합니다: 합과 차
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- 함수를 호출하고 여러 반환 값을 기대합니다
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

메서드

메서드는 객체의 구성원인 함수로, 클래스 또는 테이블과 같은 것입니다. 메서드는 첫 번째 인수로 객체 자체(self)를 기대합니다. 메서드를 호출할 때는 self를 첫 번째 인수로 자동으로 전달하기 위해 콜론 표기법(:)을 사용합니다.

Roblox의 모든 객체는 Instance에서 파생되며, Instance:Destroy(), Instance:Clone(), Instance:FindFirstChild()와 같은 일반적으로 사용되는 메서드를 포함합니다.

local Workspace = game:GetService("Workspace")
-- 점 표기법(함수)을 사용하여 부품 파괴
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- 콜론 표기법(메서드)을 사용하여 부품 파괴
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

메서드 정의

테이블에 메서드를 만들려면 메서드 이름을 키로 사용하고 메서드 함수를 값으로 사용합니다. 메서드 정의에서 self 매개변수는 메서드의 부모 테이블을 참조합니다. 콜론 표기법을 사용하여 메서드를 호출할 때, 테이블 자체를 첫 번째 인수로 전달합니다. 메서드에 대한 매개변수를 정의할 수 있지만, self 매개변수 뒤에 나열해야 합니다.

다음 예제에서 testButton 테이블은 changeEnabled 키의 값으로 메서드를 가지고 있습니다. self가 메서드의 부모 테이블을 참조하는지 확인하려면 self.enabled의 값을 출력하면 됩니다.

local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- true
-- 메서드 호출
testButton:changeEnabled(false) -- false

콜백

콜백은 다른 함수나 프로세스에 응답하여 실행되는 함수입니다.

기본 콜백

함수는 다른 함수에 전달될 수 있으며, 예를 들어 익명 함수를 사용하여 table.sort()Players.GetPlayers()에서 Players 목록을 정렬하는 콜백을 구현할 수 있습니다.

local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- 이름으로 플레이어를 정렬하기 위해 익명 콜백 사용
return a.Name < b.Name
end)

Roblox API에서 콜백은 쓰기 전용 함수 구성원을 의미하며, 콜백은 반환될 때까지 대기합니다. 널리 사용되는 콜백에는 다음이 포함됩니다:

콜백을 설정하려면 함수에 할당합니다. 예를 들어, BindableFunction.OnInvokeBindableFunction의 콜백입니다. 이름이 있는 함수나 익명 함수를 설정할 수 있으며, 콜백에서 :Invoke() 메서드를 호출하여 해당 함수를 호출(호출)할 수 있습니다. :Invoke()에 전달하는 인수는 콜백으로 전달되며, 콜백 함수의 반환 값은 :Invoke()의 호출자에게 반환됩니다.

local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

함수 기법

이벤트 핸들러

이벤트가 발생할 때 실행되도록 이벤트 핸들러로 알려진 함수를 할당할 수 있습니다. 예를 들어, Players.PlayerAdded 이벤트에 onPlayerAdded()라는 함수를 만들어 어떤 플레이어가 들어오는지 이름을 출력할 수 있습니다. 자세한 내용은 이벤트를 참조하세요.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " 게임에 참여했습니다!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

익명 함수

이름이 없는 함수를 익명 함수라고 하며, 콜백이벤트 핸들러로 사용할 수 있습니다. 이름이 있는 함수와 마찬가지로 익명 함수는 functionend 키워드로 시작하고 끝나야 하지만, 항상 지역 범위를 가지므로 지역 범위를 나타내기 위해 local 키워드를 사용할 필요는 없습니다.

다음 예제에서 task.delay() 함수의 콜백과 Players.PlayerAdded 이벤트의 이벤트 핸들러는 모두 익명 함수입니다.

-- task.delay()의 콜백에서 익명 함수
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- 이벤트 핸들러에서 익명 함수
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " 게임에 참여했습니다!")
end)

모듈 스크립트의 함수

ModuleScripts에 저장하여 여러 스크립트에서 함수를 재사용할 수 있습니다. 함수는 Luau 데이터 유형이므로 다른 데이터와 함께 테이블에 저장할 수 있습니다.

가변 인수 함수

가변 인수 함수는 임의의 수의 인수를 수용합니다. 예를 들어, Globals.LuaGlobals.print()는 가변 인수 함수입니다.

print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("The %s is a %s!", "cake", "lie")) -- The cake is a lie!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

가변 인수 함수 정의

가변 인수 함수를 정의하려면 마지막 또는 유일한 매개변수로 ... 토큰을 사용합니다(연결 연산자..와 혼동하지 마세요). 사용 편의를 위해 ... 값을 테이블에 넣을 수 있습니다.

local function variadic(named, ...)
local arguments = {...} -- 추가 인수를 테이블에 포장
print("명명된 인수 =", named)
for i, value in arguments do
print("입력 번호.", i, "=", value)
end
end
variadic(10, "안녕하세요", 20, "가변 인수 함수")
--[[ 결과 출력:
명명된 인수 = 10
입력 번호. 1 = 안녕하세요
입력 번호. 2 = 20
입력 번호. 3 = 가변 인수 함수
]]

인수 전달

가변 인수 함수를 다른 함수의 래퍼로 정의하여 인수를 전달하거나 전달할 수 있습니다.

local function printAround(functionToPrintAround, ...)
print("이전")
functionToPrintAround(...)
print("이후")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ 결과 출력:
이전
x = 1
y + z = 5
이후
]]

배열로 가변 인수 함수 호출

print()와 같은 전역 가변 인수 함수에 값의 테이블 배열을 전달하려면, 테이블 자체 대신 테이블의 값을 전달하기 위해 전역 unpack() 함수를 사용할 수 있습니다.

local squares = {1, 4, 9, 16, 25}
print("첫 5개의 제곱수는:", unpack(squares))
-- 첫 5개의 제곱수는 1 4 9 16 25
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.