ModuleScript
ModuleScript : LuaSourceContainer
Overview
ModuleScript는 공통된 기능을 분리하여 재사용 가능하도록 구조화하기 위해 사용되는 스크립트 인스턴스입니다.
require() 함수로 불러올 수 있으며, 호출 시 하나의 값을 반환합니다. 즉, 동일한 실행 환경에서 여러 스크립트가 같은 ModuleScript를 require()하더라도 모듈은 한 번만 실행되며, 이후 호출에서는 처음 반환된 값을 그대로 공유합니다. 이처럼 중복을 줄이고 기능을 한 곳에 정의해 여러 위치에서 활용할 수 있어, 유지보수와 재사용성이 크게 향상됩니다.
서버와 클라이언트처럼 서로 다른 실행 환경에서는 ModuleScript가 각각 독립적으로 실행됩니다. 예를 들어 서버에서 이미 실행된 ModuleScript여도 클라이언트에서 require()를 호출하면 별도로 다시 실행됩니다.
require() 함수는 기본적으로 호출 시 실행 흐름을 멈추지 않지만, 만약 ModuleScript 내부에서 wait() 같은 대기 함수가 사용될 경우, 해당 ModuleScript가 값을 반환할 때까지 호출한 스레드가 대기하게 됩니다. 또한, ModuleScript 간에 서로를 require()하는 순환 참조가 발생하면 스레드가 멈추고 진행되지 않으므로, 대규모 프로젝트에서는 의존성 관리를 철저히 해야 합니다.
모듈 스크립트는 테이블에 속성과 함수를 정의한 뒤, 이를 반환하여 외부 스크립트에서 참조할 수 있도록 할 수 있습니다.
local UtilityModule = {}
UtilityModule.IsShowMessage = true
-- 함수를 :로 정의하면 함수 내부에서 self로 해당 테이블을 참조할 수 있습니다.
function UtilityModule:PrintMessage(message)
if not self.IsShowMessage then
return
end
print("PrintMessage : " .. message)
end
return UtilityModule
외부 스크립트에서 require 함수를 통해 모듈 스크립트에서 반환한 테이블을 가져올 수 있으며, 이를 통해 해당 테이블에 정의된 속성과 함수에 접근할 수 있습니다.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UtilityModule = require(ReplicatedStorage:WaitForChild("UtilityModule"))
UtilityModule:PrintMessage("Hello!")
UtilityModule.IsShowMessage = false
UtilityModule:PrintMessage("Hello!")
Properties
Methods
Events
See also
모듈 스크립트Last updated