개요
CharacterModules.CharacterInfo.Component.InventoryInfo.ItemInfo.Database.
- 일반 슬롯(ItemSlot)에 배치되는 아이템 정의를 단일 모듈에서 선언한다.
- 런타임 초기화 시점에
ItemInfos레지스트리에 모든 아이템 메타데이터를 등록한다. - 데이터와 등록 절차를 분리해 테스트와 런타임에서 동일한 아이템 구성을 재사용한다.
- 인벤토리 속성(Attribute)과 래퍼를 통해 아이템 상태를 안전하게 읽고 쓴다.
책임
- 아이템 메타데이터 스키마를 표준화하고 타입 검증 절차를 제공한다.
- 등록 순서에 따라 아이템 고유 식별자를 부여해 의도치 않은 충돌을 방지한다.
- 래퍼 계층을 통해 속성 접근을 추상화하고 UI 또는 시스템 단위에서 일관된 인터페이스를 보장한다.
레지스트리 흐름
TempRegistry
CharacterModules.CharacterInfo.Component.InventoryInfo.ItemInfo.TempRegistry.
ItemInfoParams를 받아 즉시 생성하지 않고 임시 저장소에 보관한다.- 파라미터의 필수 필드와 허용된 값 범위를 검증한다.
- 잘못된 인자가 포함되면 상황에 맞는 에러를 발생시켜 초기화 단계에서 조기 실패한다.
Database 초기화
- 게임 시작 시점에
TempRegistry에 쌓인 정의를 순회한다. - 순회 순서대로
Id를 할당하고ItemInfo인스턴스를 생성한다. - 생성한 인스턴스를
ItemInfos맵에 등록하고, 키는 네임스페이스 규칙을 따르는 문자열을 사용한다. - 최종 등록이 완료되면
TempRegistry는 비워 안전한 재초기화를 보장한다.
ItemInfo 구조
필수 필드
Id: number. 레지스트리 순서로 할당되는 고유 식별자다.DisplayName: string. UI 표기를 위한 지역화 키이며 LocalizationTable에서 해석한다.DescriptionKey: string. 상세 설명용 지역화 키다. 기본값은 빈 문자열 키("")다.MaxStack: number. 슬롯 내 최대 수량이다. 0이면 무한을 의미한다.
선택 필드
IconImage: string?. 이미지 애셋 식별자다. 지정하지 않으면 기본 아이콘을 사용한다.DefaultAttributes: {[string]: AttributeValue}?. 아이템 래퍼 초기화 시 적용할 기본 속성 값 집합이다.Metadata: {[string]: any}. 개별 아이템 전용 확장 정보를 보관한다, Attribute 로 저장할 땐 Messagepack 을 이용해 저장한다
속성 관리
- 인벤토리 슬롯 인스턴스는 Roblox Attribute를 이용해 런타임 상태를 저장한다.
ItemInfo는 Attributes 키 네이밍 규칙을 정의하고 타입을 강제한다.- 필수 속성은 래퍼 초기화에서
SetAttribute를 통해 보장한다.
래퍼 계층
InventoryItemWrapper가ItemInfo와 인벤토리 서버 객체를 묶는다.GetProperty(name: string)은 내부 속성 테이블과 Attribute를 조회해 일관된 값을 반환한다.SetProperty(name: string, value: any)는 유효성 검사를 통과한 값만 Attributes와 내부 캐시에 적용한다.- 래퍼는 메타데이터를 참조 가능하나 직접 변경하지 않으며, 상태 변경은 전부 속성을 통해 수행한다.
레지스트리 사용 규칙
- 모든 아이템은
TempRegistry.Registry(params)를 통해 등록한다. params.Name은 전역 네임스페이스 규칙을 따르는 문자열이어야 한다.- 같은 이름의 아이템은 두 번 이상 등록할 수 없다.
- 테스트 환경에서는 동일한 초기화 함수를 호출해 프로덕션과 같은 구성을 확보한다.