Skip to main content

개요

Architecture 폴더 에서 설계도 작성을 하는 법을 다룹니다.

설계도는 AI 나 혹은 설계 기반을 알기 위해 작성하는 임시 문서입니다. 실제 API 를 참고하기 위한 문서는 아닙니다, 현재 만들어지고 있는 미완성인 문서를 작업할 때 참고하는 문서입니다.

실제 API 는 API 문서 나 사용법은 프레임워크 가이드 에서 참고합니다.

작성

document 가이드 를 기준으로 작성합니다.

API 작성

종류에 따른 마크다운

모듈/객체의 함수나 속성을 정리해야할 땐 종류에 따라 정리합니다. 정리 할 때 순서는 다음과 같습니다, 없으면 생략합니다.

  1. 개요
  • 경로
  • 세부 항목들
  1. 생성자
  2. 속성
  3. 메소드
  4. 함수
  5. 기타(추가설명)
  • 세부 항목들

또한 설명은 이름만으로도 알 수 있다면 생략해도 됩니다.

개요

경로

경로는 백틱으로 감싸 다음처럼 작성한다.

  • src/{서비스} 에 1차적으로 들어가는 경로일 경우 이러한 경로는 플레이스 기반으로 연결하는 프로젝트에서 유효.

    예시:

    • ReplicatedStorage.Modules
    • ServerStorage.ServerPackages
  • src 폴더에 1차적으로 들어가고 .project.json 에서 위치를 할당하는 경로일 경우 이러한 경로는 깃허브 업로드를 위한, 패키지로써의 사용을 위하거나, 폴리레포/모노레포 방식의 프로젝트에서 유효하다.

    예시:

    • BakeryAssets/ObjectModules (서브모듈로써 사용할 이름이 있을 경우 src 를 대체해 이름을 적는다)
    • src/CharacterModules (서브모듈로써 사용할 이름이 없는 경우)
  • 서비스나 레포지토리 안에 포함된 1차 이하의 특정 폴더에 2차적으로 내재될 경우 길지 않으면서 보기좋은 경로를 위해 서비스의 부분은 생략하고 1차 이하의 특정 폴더의 경로만 적는다.

    예시:

    • ObjectModules/ExtendedInstance
    • ObjectModules/DataObject
    • CharacterModules/CharacterInfo
  • 서비스나 레포지토리 안에 포함된 3차 이하의 폴더에 내재될 경우 길지 않으면서 보기좋은 경로를 위해 특정 폴더의 부분은 생략하고, 2차 이하의 특정 폴더 경로부터 전부 적는다.

    예시:

    • ObjectModules.ExtendedInstance.Observer
    • CharacterModules.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?,
}

하지만 이미 문서 내에 설명되어있는 타입일 경우, 생략합니다. ObjectSubobject 타입이, 문서 전체적으로 혹은 어딘가에서 설명했다면, 넣지 않습니다.

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 란 접미사를 붙입니다

순서는 다음과 같습니다

  1. 개요
  2. 설명