Verse 모듈 은 재배포되거나 다른 코드가 종속될 수 있는 아토믹 유닛 코드로, 시간 경과에 따라 종속성을 유지하면서 확장할 수 있습니다. Verse 파일에 모듈을 임포트하여 다른 Verse 파일의 코드 정의를 사용할 수 있습니다.
Verse 모듈은 프로젝트의 파일 계층구조에서 폴더 에 의해 지정되며 모듈의 이름은 폴더 이름과 동일합니다. 모든 .verse 파일은 해당 Verse 모듈의 일부이므로 같은 폴더에 있으며, 명시적으로 해당 모듈을 임포트하지 않아도 모듈의 다른 Verse 파일 내 정의에 액세스할 수 있습니다.
모듈은 /Verse.org/Verse 와 같은 경로 를 통해 식별됩니다. Verse 경로는 웹 도메인의 개념에서 차용한 것으로, 다양한 요소를 식별하기 위한 글로벌 네임스페이스를 제공합니다. 경로는 지속적이고 고유하며 모든 Verse 프로그래머가 검색할 수 있습니다.
기존 Verse 모듈의 목록은 Verse API 레퍼런스를 참고하세요.
모듈 멤버
다음 구문을 사용하여 .verse 파일 내에 모듈을 생성할 수 있습니다.
module1 := module:
...
# 클래스와 함수처럼 중괄호 구문도 지원합니다.
module2 := module
{
...
}
.verse 파일 내에서 정의한 모듈은 .verse 파일의 최상위 레벨에 있는 모든 콘텐츠를 포함할 수 있습니다. 여기에는 함수, 상수, 다양한 타입 및 다른 모듈 정의가 포함됩니다. 예를 들면 다음과 같습니다.
module := module:
submodule<public> := module:
submodule_class<public> := class {}
module_class<public> := class{}
서브모듈의 콘텐츠는 베이스 모듈의 이름으로 정규화된 모듈 이름을 사용하여 레퍼런스할 수 있습니다. 예를 들어 module1 외부에서 class1 을 레퍼런스하려면 module1.module2.class1 처럼 하면 됩니다.
다른 Verse 파일에서 정의 임포트하기
Verse 모듈의 콘텐츠를 사용하려면 모듈의 경로를 사용하여 모듈을 임포트해야 합니다. 예를 들어 다음 코드는 /Verse.org/Random 경로로 식별되는 Random 모듈을 임포트합니다.
using { /Verse.org/Random }
Verse 파일에 Random 모듈을 임포트하면 GetRandomInt())` 함수와 같은 모듈의 코드 정의를 사용할 수 있습니다.
그 외 일반적인 모듈 예시로는 Devices, Simulation 및 Diagnostics 모듈이 있으며, 모두 UEFN을 통해 새 Verse 파일을 생성할 때 기본적으로 임포트됩니다.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
다른 Verse 파일에서 모듈을 임포트하려면 using { /YourVerseFolder/your_module } 과 같은 로컬 경로를 사용하거나, 파일이 같은 디렉터리에 있는 경우 using { your_module } 을 사용하면 됩니다.
중첩된 모듈은 서브모듈 모듈 앞에 베이스 모듈을 임포트하거나 점 표기법을 사용하여 임포트할 수 있습니다. 예를 들면 해당 모듈은 다음과 같습니다.
base_module<public> := module:
submodule<public> := module:
submodule_class := class:
...
submodule 멤버에 액세스하려면 submodule 앞에 base_module 를 임포트하거나 base_module.submodule 을 임포트하면 됩니다. base_module 앞에 submodule 을 임포트하면 오류가 발생합니다.
# 베이스 모듈과 서브모듈 모두에서 작동 및 임포트합니다.
using { base_module }
using { submodule }
# 서브모듈에서만 작동 및 임포트합니다.
using { base_module.submodule }
# 작동하지 않습니다.
using { submodule }
using { base_module }
Verse 프로젝트에서 하위 폴더를 생성하면 해당 폴더에 대한 모듈이 자동으로 생성됩니다. 예를 들어 base_module 이 module_folder 폴더에 정의된 경우 module_folder 에는 base_module 이 포함된 자체 모듈을 갖습니다.
이를 확인할 수 있는 또 다른 방법은 module_folder/base_module 파일 구조가 다음과 같다는 것입니다.
module_folder := module:
base_module := module:
submodule := module:
submodule_class := class:
...
module_folder 모듈은 base_module 앞에 임포트되어야 합니다.
# base_module과 해당 서브 모듈이 포함된 폴더를 임포트합니다.
using { module_folder }
using { base_module }
using { submodule }
모듈 내 정의 액세스하기
모듈 또는 다른 Verse 파일에서 사용하는 모듈 콘텐츠를 액세스하는 것은 public 과 internal 같은 액세스 지정자를 사용하여 설정할 수 있습니다.
정의의 디폴트 액세스는 internal 이며, 해당 모듈 내에서만 찾을 수 있다는 것을 의미합니다. 또한 프로젝트의 폴더에 의해 시작된 모듈에도 해당됩니다.
디폴트 액세스 지정자는 internal 이므로 모듈 멤버를 public 으로 만들지 않으면 모듈 외부에서 모듈 멤버에 액세스할 수 없습니다. 예를 들면 다음과 같습니다.
# 이 모듈과 해당 멤버는 다른 Verse 파일에서 액세스할 수 없습니다.
private_module := module:
SecretInt:int = 1
...
# 하지만 이 모듈과 해당 서브모듈은 액세스할 수 있습니다.
public_module<public> := module:
public_submodule<public> := module:
PublicInt<public>:int = 1
...
다른 범위에서 액세스하려면 모듈과 해당 멤버가 모두 public 이어야 합니다.