엔티티별 레이아웃
8. 엔티티별 최종 레이아웃
시트 작성 문서에 그대로 옮길 수 있는 형태로 적습니다. 모든 엔티티가 같은 뼈대입니다 —
선언 셀 | 설명 셀, 그 아래 :field 행, 그 아래 데이터.
8.1 테이블 — 기본형
- 1행 — 선언과 설명. 3행 —
Grade는 enum 이름,string[]은 셀 배열입니다. - 2행 —
@N와이어 태그,*code보조 인덱스. 7행 — 마커 열#로 행 제외.
8.2 테이블 — struct와 배열의 4가지 표기
DSL에 이렇게 선언되어 있다고 합시다.
struct Reward (sep=",")
field itemId foreign Item
field count int (min=1)
| 표기 | 컬럼 | 무엇 |
|---|---|---|
| (가) 인라인 그룹 | pos.x pos.y pos.z — 멤버마다 타입 기재 | struct 선언 없이 레코드 하나 |
| (나) DSL struct 그룹 | reward.itemId reward.count — 첫 컬럼 타입 칸에 Reward 하나 | 반복 기재가 사라집니다 |
(다) sep 한 셀 | reward 컬럼 하나, 타입 Reward, 셀에 101,2 | 위 예시의 C · G열 |
| 원소 번호 칸 | slots[0].id slots[1].id — 타입은 원소 0에만 | 칸의 수가 정해진 배열 |
8.3 테이블 — 멀티 로우
- 5행(연장 행)의
title칸에 값을 적으면 그 셀을 가리켜 오류입니다(§6.1 규칙 3). - 7행 — 연장 행의
#는 그 원소만 제외합니다. 6행에 붙었다면 레코드 2 전체가 빠집니다. - DSL struct를 쓰면 D열 타입 칸에
Reward하나만 적고 E열은 비웁니다(§4.3).
8.4 enum
:type행이 없습니다 — 컬럼의 뜻이 이름으로 정해져 있습니다.label과value는 필수,alias와desc는 생략할 수 있는 컬럼이고 순서는 자유입니다.alias는 데이터 셀에 적을 수 있는 네 번째 표기입니다(선언 표기 · Pascal 표기 · 숫자 · 별칭) — 행 키 레이아웃 §4.1의 표시명 분석과 DSL의(alias=)가 같은 자리이고, 별칭을 바꾸면 그 표기로 적힌 데이터 셀이 함께 바뀌어야 한다는 주의도 그대로 물려받습니다.- 0번 라벨이 없으면
None = 0이 자동 삽입되는 것도 기존과 같습니다.
8.5 상수셋
name·type·value필수,desc생략 가능.type칸도 §4의 접힌 타입 표현이므로 6행처럼 enum 이름을 바로 적습니다 — 기존의 (타입enum+ 디테일) 5컬럼 구조가 4컬럼이 됩니다.- 상수는 코드로 나가고 데이터 파일에는 실리지 않는다는 기존 주의가 그대로 적용됩니다.
- 배열도 됩니다 — 스칼라 타입들과 enum(
Grade[])입니다. 상수가 파일에 실리지 않으므로 여기에 와이어 질문은 없고, 필요한 것은 그 언어가 상수 자리에서 받아들이는 목록 표현 하나입니다. 원소의 표기는 스칼라의 것과 같고 감싸는 방식만 언어마다 갈립니다. - 대괄호는 컬럼과 같은 순서로 떼어집니다 — 먼저
[]를 떼고 남은 이름을 접힌 표현으로 보고, 그다음에 배열로 감쌉니다.Grade[]가 한동안 되지 않았던 것은 상수 경로가 그 순서를 갖지 않아서 표현 전체를 enum 조회에 넣었기 때문이고, 표기의 문제가 아니었습니다.
| 언어 | 타입 | 리터럴 |
|---|---|---|
| C# · Java | T[] | new T[] { … } |
| C++ | std::vector<T> | { … } |
| Go | []T | []T{ … } |
| Rust | &'static [T] | &[ … ] — const |