모듈 스크립트 소개

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

프로젝트가 복잡해짐에 따라 스크립트가 어떻게 구성되는지를 고려하는 것이 중요해집니다. 좋은 구성 방법은 스크립트 간의 코드 중복을 방지하고 관리하기 쉽게 할 수 있습니다.

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

모듈 스크립트에 일반적으로 사용되는 코드를 저장함으로써, 여러 스크립트를 업데이트할 필요 없이 하나의 모듈 스크립트만 변경하면 되어 코드 유지보수 및 구성이 더 쉬워집니다.

모듈 스크립트 기초

모듈 스크립트는 실제로 스크립트 객체와 비교하여 별도의 개체입니다. Roblox에서 모듈 스크립트는 보라색 아이콘으로 표시할 수 있습니다.

모듈 스크립트 생성

ModuleScripts는 서버 측 스크립트에서 사용될 때는 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("Should award " .. coins .. " coins")

일반적인 문제 해결

이곳의 몇 가지 팁은 모듈 스크립트 작업 시 일반적인 문제를 해결합니다. 모듈 스크립트는 어려운 주제일 수 있으며 더 많은 뉘앙스가 있을 수 있음을 명심하세요. 자세한 내용은 모듈 스크립트에 대한 기술 가이드를 참조하세요.

문제: "Infinite yield possible" 또는 "not a valid member"라는 오류 메시지가 발생합니다.

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

문제: "attempt to index global"라는 오류 메시지가 발생합니다.

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

요약

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

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

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