모듈 스크립트 소개

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

프로젝트가 복잡해짐에 따라 스크립트가 어떻게 구성되는지에 대해 생각하는 것이 중요해집니다. 좋은 조직 관행은 코드가 스크립트 간에 중복되지 않거나 관리하기 어려워지지 않도록 보장할 수 있습니다.

코드를 구성하고 재사용하는 더 나은 방법은 모듈 스크립트를 사용하는 것입니다. 모듈 스크립트는 공유된 목적을 충족하기 위해 설계된 함수와 변수를 저장하는 고유한 유형의 스크립트입니다. 예를 들어, 플레이어의 돈이나 적을 관리하는 데 사용됩니다. 모듈 스크립트 내의 코드는 다른 스크립트에서 사용할 수 있습니다. 이렇게 하면 플레이어가 퀘스트를 완료하거나 픽업을 찾을 때마다 여러 다른 스크립트에서 동전을 주는 동일한 함수를 호출할 수 있습니다.

자주 사용되는 코드를 모듈 스크립트에 저장함으로써, 여러 스크립트를 업데이트하는 대신 하나의 모듈 스크립트만 수정하면 되므로 코드 유지 관리와 조직이 더 쉬워집니다.

모듈 스크립트 기본

모듈 스크립트는 실제로 스크립트 객체와는 별도의 객체입니다. Roblox에서 모듈 스크립트는 보라색 아이콘으로 표시됩니다.

모듈 스크립트 만들기

모듈 스크립트는 서버 측 스크립트에서 사용할 때는 ServerScriptService에, 클라이언트 측 로컬 스크립트(예: GUI 상호작용)에서 사용할 때는 ReplicatedStorage에 일반적으로 배치됩니다.

  1. ServerScriptServiceModuleScript를 만듭니다.

모듈 스크립트의 구조

모듈 스크립트가 생성되면, 모든 모듈 스크립트는 아래의 코드로 시작합니다:

local Module = {}
return Module

local Module = {} 라인은 모듈의 공유 함수와 변수를 저장할 수 있는 테이블 또는 코드 컨테이너를 생성합니다. 이 테이블은 RewardManager 또는 ParticleController와 같이 모듈의 목적에 맞게 이름을 바꿔야 합니다. 다른 변수들이 카멜 케이스(myVariable)를 사용하는 것과 달리, 모듈 테이블은 파스칼 케이스를 사용하고 대문자로 시작하는 것이 권장됩니다(MyModule).

local RewardManager = {}
return RewardManager

다른 스크립트가 모듈의 비로컬 함수나 변수를 사용할 수 있도록 하려면, 모든 모듈은 return MyModule로 끝납니다. 다른 스크립트가 모듈에서 코드를 가져오려고 할 때, return은 해당 스크립트가 모듈 테이블 내에 저장된 코드에 접근할 수 있도록 합니다.

모듈 스크립트에 추가하기

다른 스크립트에서 사용할 수 있는 함수나 변수를 모듈에 추가하려면, 모듈 테이블의 이름 뒤에 점을 붙이고 함수나 변수의 이름을 입력합니다. 예를 들어 TestModule.myVariable과 같이 입력합니다. 점 연산자를 사용하는 것은 테이블에 코드를 추가하는 또 다른 방법으로, 모듈 테이블이 반환될 때 다른 스크립트가 해당 코드에 접근할 수 있도록 합니다.

local TestModule = {}
-- 'TestModule' 테이블에 변수를 추가합니다.
TestModule.myVariable = 100
-- 'TestModule' 테이블에 함수를 추가합니다.
function TestModule.doTask(player)
-- 자리 표시자 코드
end
return TestModule

모듈 스크립트의 범위

모듈 함수나 변수를 외부 스크립트에서 사용하려면, local을 입력하지 마세요.

변수와 함수 앞에 local을 입력하면 해당 스크립트에서만 사용 가능하다는 의미입니다. 이는 오류를 줄이고 문제를 해결하기 위한 대부분의 스크립트에서 좋은 관행이지만, 모듈 스크립트의 함수와 변수를 로컬로 만들 수는 없습니다.

해당 모듈 스크립트에서만 사용되는 코드는 여전히 local을 포함해야 합니다. 예를 들어, 아래 코드는 모듈 스크립트에서만 사용할 수 있는 로컬 변수 difficultyModifier와 모듈 외부의 스크립트에서 사용할 수 있는 함수 getCoinReward()를 포함합니다.

local RewardManager = {}
-- 모듈 스크립트에서만 사용 가능
local rewardCoins = 50
-- 모듈 스크립트에서만 사용 가능
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 다른 스크립트에서 사용 가능
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager

다른 스크립트에서 모듈 사용하기

모듈 스크립트 자체로는 코드를 실행할 수 없습니다. 다른 스크립트에서 require() 키워드를 사용하여 로드해야 합니다. require() 함수는 모듈 스크립트의 위치를 인수로 받습니다.

모듈을 사용하려면, 별도의 스크립트에서 변수를 require(moduleScript)와 같게 설정합니다.

local MyModule = require(ServerStorage.ModuleScript)

이제 변수 MyModule은 해당 모듈 스크립트에서 생성된 모듈 테이블을 포함합니다. 해당 테이블의 함수와 변수를 사용하려면, 변수 이름 뒤에 점을 붙이고 모듈 스크립트에서 사용할 정확한 이름을 입력합니다. 예를 들어 MyModule.myFunction()과 같이 입력합니다. 스크립트가 실행되고 해당 줄에 도달하면, 모듈 테이블에 저장된 특정 함수나 변수에 접근하게 됩니다.

local MyModule = require(ServerStorage.ModuleScript)
MyModule.myFunction()

RewardManager 예제

ModuleScript - RewardManager
local RewardManager = {}
-- 모듈 스크립트에서만 사용 가능
local rewardCoins = 50
-- 모듈 스크립트에서만 사용 가능
local difficultyModifier = {
easy = 0.5,
normal = 1,
hard = 2
}
-- 다른 스크립트에서 사용 가능
function RewardManager.getCoinReward(difficulty)
local coins = difficultyModifier[difficulty] * rewardCoins
return coins
end
return RewardManager
Script - TreasureChestScript
local ServerStorage = game:GetService("ServerStorage")
-- 모듈 스크립트 로드
local RewardManager = require(ServerStorage.RewardManager)
-- 모듈 스크립트의 함수 호출
local coins = RewardManager.getCoinReward("easy")
print("보상할 동전 수: " .. coins .. " 동전")

일반적인 문제 해결

여기에서 제공하는 몇 가지 팁은 모듈 스크립트를 사용할 때 발생하는 일반적인 문제를 다룹니다. 모듈 스크립트는 복잡한 주제가 될 수 있으며 더 많은 뉘앙스가 있다는 점을 염두에 두세요. 더 자세한 내용은 모듈 스크립트에 대한 더 기술적인 가이드를 참조하세요.

문제: "Infinite yield possible" 또는 "not a valid member"를 포함하는 오류 메시지가 나타납니다.

  • 로드된 모듈 스크립트의 철자를 확인하세요. require()는 모듈 스크립트의 정확한 경로와 철자를 포함해야 하며, 모듈 테이블의 이름과 다를 수 있습니다.

문제: "attempt to index global"를 포함하는 오류 메시지가 나타납니다.

  • 모듈 스크립트를 사용하는 모든 스크립트에서 require() 함수를 사용하여 로드되었는지 확인하세요. 그렇지 않으면 해당 스크립트는 모듈 스크립트의 함수와 변수를 사용할 수 없습니다.

요약

Roblox의 모듈 스크립트는 코더가 코드를 구성하고 재사용하는 방법입니다. 모듈 스크립트는 종종 ServerStorage(또는 클라이언트 기반 상호작용을 위한 ReplicatedStorage)에 저장됩니다. 그곳에서 다른 스크립트는 해당 모듈 스크립트에 저장된 함수와 변수를 호출할 수 있습니다.

예를 들어, 한 게임은 플레이어가 객체를 수집할 때 포인트를 부여할 수 있습니다. 모듈 스크립트는 포인트를 부여하는 코드를 처리할 수 있습니다. 그런 다음, 다양한 유형의 객체에 대한 스크립트는 모듈 스크립트 함수를 호출하기만 하면 됩니다. 이렇게 하면 스크립트 간에 코드를 재사용할 필요가 줄어들어 코드 이해와 유지 관리가 더 쉬워집니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.