/****************************************************************************** * * 이 문서의 권리를 명시하는 주석을 제거하지 마시오. * 문서의 내용에 대한 모든 권리는 에 있습니다. * * Do not remove any comments that specifies the rights of the document. * Copyright(c)2019 all rights reserved by . * ******************************************************************************/ -------------------------------------------------------------------------------- * 소개 -------------------------------------------------------------------------------- - 코딩할 때, 이 프로젝트에서 통용되는 대략적인 이름짓기에 대한 규칙들을 소개한다. -------------------------------------------------------------------------------- * 형식 부분 -------------------------------------------------------------------------------- - 헝가리언 표기법을 쓰지 않는다. : int 변수 앞에 n 붙이고, float 변수 앞에 f 붙이고, 문자열 앞에 sz 붙이는 등의 이름 짓기를 하지 않는다. - 멤버 변수, 지역 변수, 정적 변수들은 앞글자가 소문자로 시작하는 낙타 표기법을 쓴다. - 그 외 요소(상수, 함수, 속성, 네임스페이스, 구조체, 클래스, 인터페이스 등)들은 전처리기만 제외하고 모두 앞글자를 대문자로 시작하는 낙타 표기법을 쓴다. - 전처리기는 모든 문자를 대문자로 쓰며, 띄어쓰기는 언더 바(_)로 대신한다. - 전처리기를 제외한 곳에서는 언더 바(_)의 사용을 자제한다. -------------------------------------------------------------------------------- * 의미 부분 -------------------------------------------------------------------------------- - 'Manager' 이름이 붙는 객체는 전역적인 관리를 맡는 객체이다. : 실제로 전역 단위가 아니라 하더라도, 전역 관리자를 통해 접근할 수 있는 유일 객체여야 한다. - 'Controller' 이름이 붙는 객체는 인스턴스의 특정 분야 관리를 맡는 객체이다. : 가장 쉬운 예는, 캐릭터들의 컴포넌트들이다. 스킬을 맡으면 SkillController, 이동을 맡으면 MoveController 같은 식으로 짓는다. - 'Entity'는 캐릭터 개체를 가리킨다. : 이 개체는 눈에 보이는 어떤 특정 모델링 데이터를 포함하지 않는, 관념상의 존재이다. - 'Item'은 게임 내에서 플레이어 캐릭터가 사용하거나 보유하는 소유물을 가리킨다. : 이것 역시 외형과 직접적인 관련은 없다. - 'Equipment' : 캐릭터가 장착할 수 있는 부위를 가리킨다. - 'Part' : 캐릭터의 특정 신체 부위를 구성하는 모델, 혹은 특정한 신체 부위의 지점에 붙어 있는 모델을 가리킨다. - Item, Equipment, Part는 매우 혼동하기 쉬운 개념이다. 하지만 셋은 용도에 따라 분명한 차이가 있으며, 그 차이점은 아래와 같다. Item은 외형 모델을 실제로 가지고 있는지와는 관련이 없다. 인벤토리에서 아이콘만으로 존재하더라도 그 Item은 별개의 객체로 존재한다. Equipment는 아이템 중에서 캐릭터가 장착이 가능한 경우, 그 장착 가능한 부위를 가리킨다. Part와 다른 점은, Part는 반드시 외형을 가지는데 비해, Equipment는 그렇지 않다는 점이다. 예를 들어, 아주 작은 장신구의 경우, Equipment 타입이 존재해서 캐릭터가 '장착'할 수는 있으나 외형으로 드러나는 모델은 없을 수 있다. 즉, Equipment의 분류는 프로그래밍 시스템보다는 기획적인 영역의 분류이다. Part는 반드시 외형적으로 눈에 띄는 모델을 가진다. 심지어, Item과 Part가 1:1로 대응되지 않을 수 있다. 하나의 아이템이 여러 개의 Part로 구성되는 것도 가능하다. 또한, 캐릭터의 신체 부위를 나눠서 나타내는 개념이기 때문에, Equipment의 분류보다 훨씬 분류가 많을 수도 있다. - XML 등의 스크립트로부터 읽어들인 정보를 보관하는 용도의 데이터 객체는 객체 명칭에 접미어로 ~Data를 붙인다. - 게임 내 각 객체 인스턴스들의 개별적인 원시 정보들(primitive information)을 보관하기 위한 용도의 정보 객체에는, 객체 명칭에 접미어로 ~Info를 붙인다. - ~Data와 ~Info 객체들은 형식이 매우 유사할 수 있으나, 용도가 다르다. : ~Data 객체는 XML 등의 게임 스크립트로부터 파싱한 데이터를 보존하며, 일반적으로 게임 애플리케이션을 처음 시작할 때 한 번 로딩되면, 게임 애플리케이션을 완전히 종료할 때까지 사라지지 않는다. ~Info 객체는 게임에 등장하는 각 객체 인스턴스들이 특정한 컴포넌트에 종속적이지 않은 정보들을 표현하는 단위로 사용할 때 쓴다. 그러므로, 객체 인스턴스가 소유하는 관계이며, 객체 인스턴스가 사라지면, 그 객체 인스턴스가 소유하던 ~Info도 소멸한다. - 'Name' : Name을 변수 이름으로 사용하는 경우에는 정말로 외부에 보여줄 이름 문자열의 의미로써만 사용해야 한다. 검색 키로 사용하거나 다른 식별 용도로 사용하는 경우라면, 다른 이름(Code, Key 등)을 주는 게 혼동을 피할 수 있다. - 'Code' : Code 혹은 TypeCode를 사용하는 변수는 암묵적으로 GTC(General Type Code)를 이용하고 있다고 간주한다. 이들은 종류를 구분하기 위한 이름이다. - 'ID' : ID와 Code의 차이점은 개체 인스턴스 구분과 개체 종류의 구분이 가지는 차이점과 같다. - 'Key' : 컨테이너에 대한 검색 키로 사용하는 변수 이름에 사용하면 좋다. - 'Path' : 파일 경로를 나타내는 변수에는 이런 이름을 주는 게 좋다. FilePath 등으로 성격을 좀 더 명확히 나타내면 좋다. 경로를 나타내는 문자열 값들은 Verbatim('@'를 말함)을 준 문자열을 쓰는 게 좋다.