선언된 struct의 신원 — 한 번 선언되는 타입
상태: 모든 언어에 구현되었습니다. 8절의 「확인할 것」은 모두 확인되었습니다.
두 테이블이 같은 struct 로 타이핑한 그룹이 같은 타입이 되는 것입니다.
로드맵의 다음 항목이고, 형식은 움직이지 않는 대신 모든 언어의
생성 코드가 움직입니다.
1. 지금 나오는 것
레코드 타입은 테이블마다 만들어지고 그 테이블의 산출물 안에 선언됩니다.
| 언어 | 이름 | 어디에 |
|---|---|---|
| C# | <그룹>Entry | 테이블의 레코드 클래스 안에 중첩. 접두가 아예 없습니다 |
| TypeScript | <그룹>Entry | 그 테이블의 모듈 |
| Go · Rust · Dart | <테이블><그룹>Entry | 테이블 이름이 앞에 붙습니다 |
| C · C++ | <테이블레코드>_<그룹>_entry | 같은 자리, 다른 표기 |
두 테이블이 각각 reward 그룹을 Reward 로 타이핑하면, C#은 같은 이름의 다른 타입 둘을
내고 나머지는 다른 이름의 다른 타입 둘을 냅니다. 어느 쪽이든 하나를 받는 함수를 쓸 수
없습니다.
이름이 선언이 아니라 그룹에서 옵니다. 실측하면
Bonus로 타이핑된bonus그룹이BonusEntry로 나옵니다 — 시트의 그룹 이름에Entry를 붙인 것입니다. 그래서 두 시트가 같은 선언을reward와prize로 각각 적었다면 오늘은RewardEntry와PrizeEntry가 되고, 이 작업 뒤에는 둘 다Reward가 됩니다. 쓰는 쪽에서 보이는 이름이 바뀌는 것이고, 그것이 이 작업의 diff가 큰 이유입니다.
2. 접두어 제거로 부족한 이유
<테이블><그룹>Entry 에서 테이블 이름을 떼면 이름은 같아집니다. 선언은 여전히 두 번
됩니다. 필요한 것은 이름의 문제가 아니라 신원의 문제입니다.
선언이 타입의 신원입니다. 그룹이
Reward로 타이핑되었다는 것은 그 그룹의 원소가Reward라는 뜻이지,Reward를 닮았다는 뜻이 아닙니다.