함수

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

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

기본 함수

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

  • 함수의 범위 (전역 또는 local).
  • 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를 첫 번째 인자로 자동으로 전달하기 위해 콜론 표기법(:)을 사용합니다.

로블록스의 모든 객체는 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 목록을 정렬하는 콜백을 구현할 수 있습니다.


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

로블록스 API에서 콜백은 쓰기 전용 함수 구성원을 의미하며, 콜백은 반환할 때까지 중단됩니다. 널리 사용되는 콜백에는 다음이 포함됩니다:

콜백을 설정하려면 함수에 할당합니다. 예를 들어, BindableFunction.OnInvokeBindableFunction의 콜백입니다. 명명된 함수나 익명 함수를 설정할 수 있으며, 콜백에서 :Invoke() 메서드를 호출하여 해당 함수를 호출(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 argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "안녕", 20, "가변 함수")
--[[ 결과 출력:
Named argument = 10
Input No. 1 = 안녕
Input No. 2 = 20
Input No. 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'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.