개요
Architecture 폴더 에서 설계도 작성을 하는 법을 다룹니다.
설계도는 AI 나 혹은 설계 기반을 알기 위해 작성하는 임시 문서입니다. 실제 API 를 참고하기 위한 문서는 아닙니다, 현재 만들어지고 있는 미완성인 문서를 작업할 때 참고하는 문서입니다.
실제 API 는 API 문서 나 사용법은 프레임워크 가이드 에서 참고합니다.
작성
document 가이드 를 기준으로 작성합니다.
API 작성
종류에 따른 마크다운
모듈/객체의 함수나 속성을 정리해야할 땐 종류에 따라 정리합니다. 정리 할 때 순서는 다음과 같습니다, 없으면 생략합니다.
- 개요
- 경로
- 세부 항목들
- 생성자
- 속성
- 메소드
- 함수
- 기타(추가설명)
- 세부 항목들
또한 설명은 이름만으로도 알 수 있다면 생략해도 됩니다.
개요
경로
경로는 백틱으로 감싸 다음처럼 작성한다.
-
src/{서비스}에 1차적으로 들어가는 경로일 경우 이러한 경로는 플레이스 기반으로 연결하는 프로젝트에서 유효.예시:
ReplicatedStorage.ModulesServerStorage.ServerPackages
-
src 폴더에 1차적으로 들어가고
.project.json에서 위치를 할당하는 경로일 경우 이러한 경로는 깃허브 업로드를 위한, 패키지로써의 사용을 위하거나, 폴리레포/모노레포 방식의 프로젝트에서 유효하다.예시:
BakeryAssets/ObjectModules(서브모듈로써 사용할 이름이 있을 경우 src 를 대체해 이름을 적는다)src/CharacterModules(서브모듈로써 사용할 이름이 없는 경우)
-
서비스나 레포지토리 안에 포함된 1차 이하의 특정 폴더에 2차적으로 내재될 경우 길지 않으면서 보기좋은 경로를 위해 서비스의 부분은 생략하고 1차 이하의 특정 폴더의 경로만 적는다.
예시:
ObjectModules/ExtendedInstanceObjectModules/DataObjectCharacterModules/CharacterInfo
-
서비스나 레포지토리 안에 포함된 3차 이하의 폴더에 내재될 경우 길지 않으면서 보기좋은 경로를 위해 특정 폴더의 부분은 생략하고, 2차 이하의 특정 폴더 경로부터 전부 적는다.
예시:
ObjectModules.ExtendedInstance.ObserverCharacterModules.CharacterInfo.Component.Builder
생성자
생성자는 생성하거나, camelCase 로 시작해 객체를 반환하는 함수들입니다.
# Constructors
### new
{type}
new 함수에 대한 설명
### otherConstructor
...
속성
# Properties
### Property1
{type}
Property 에 대한 설명
### Property2
...
메소드
function Object:Method()
# Methods
### Method1
{type}
Method 함수에 대한 설명
### Method2
...
모듈 함수
function Object.FindExistingObjectFromName(name: string): Object?
# Functions
### Function1
{type}
Function 함수에 대한 설명
### Function2
...
타입 작성
타입 속 타입
인수의 타입이 params 같이 모듈 내부에서 정의된 또다른 타입이면
{type} 에 함수 타입을 작성한 뒤, 코드 아래에 적어둡니다.
-- 기존 코드
export type FindObjectParams = {
IgnoresDestroyedObjects: boolean?
Recursive: boolean?,
TargetAncestorObject: Object?,
}
function Object.FindObject(params: FindObjectParams?): Object?
-- {type} 에 쓸 양식
(params: FindObjectParams?) -> (Object?)
FindObjectParams = {
IgnoresDestroyedObjects: boolean?
Recursive: boolean?,
TargetAncestorObject: Object?,
}
하지만 이미 문서 내에 설명되어있는 타입일 경우, 생략합니다.
Object 나 Subobject 타입이, 문서 전체적으로 혹은 어딘가에서 설명했다면, 넣지 않습니다.
function Object:GetSubobjects() -> {Subobject}
-- {type} 에 쓸 양식
() -> ({Subobject})
-- 만일 Subobject 객체에 대한 설명이 문서 다른 곳에 있을 경우, 생략.
다른 모듈에서 export된 타입의 경우, 타입의 이름이 모듈과 동일하다면, 구분 없이 합니다
-- 기존 코드
export type Object = {
SpeedVbp: ValueByPriority.ValueByPriority<number>,
Subtitle: SubtitleContainer.Subtitle,
}
-- {type} 에 쓸 양식
### SpeedVbp
ValueByPriority<number> -- ValueByPriority.ValueByPriority 는 서로 동일하므로, 모듈 이름 생략
### Subtitle
SubtitleContainer.Subtitle -- SubtitleContainer 와 동일하지 않기에 모듈 이름 유지
아래는 각 설명에 쓰일 타입을 어떻게 작성하는 지에 대한 설명입니다.
생성자/모듈 함수
그대로 인수 타입과 반환 타입을 적어줍니다
-- 기존 코드
function Object.new(arg1: T, arg2: U): Object
-- {type} 에 쓸 양식
(arg1: T, arg2: U) -> (Object)
속성
속성의 타입을 씁니다
-- 기존 코드
Object.SpeedVbp = ValueByPriority.new(...)
-- {type} 에 쓸 양식
ValueByPriority<number>
양식에서 따로 추가해야할 타입이 없고 한 줄로 표기 가능하다면,
`type`
로 표기합니다.
공간을 아끼고, 속성의 타입은 대체로 린팅이 필요없기 때문입니다.
예시:
### AutoSync
`boolean`
설명
### ContextText
`string`
설명
### RowInfo
\```lua
{
RowIndex: number,
Name: string,
_debugId: string,
}
\```
%% 해당 타입은 한 줄로 표기할 수 없으니, 다른 양식처럼 린팅해줍니다. %%
설명
메소드
self 를 제외하고 인수 타입과 반환 타입을 적어줍니다
-- 기존 코드
function Object:GetVelocityAtPosition(position: Vector3, depth: number?): Vector3
-- {type} 에 쓸 양식
(position: Vector3, depth: number?) -> (Vector3)
API 가 아닌 추상 설계도 작성
-archiectur 란 접미사를 붙입니다
순서는 다음과 같습니다
- 개요
- 설명