13 KiB
Code Convention
Created Date : 10/27/2023 10:48:15
Last Update Date : 4/24/2025 18:48:15
Version 0.6
Introduction
본 문서는 메타버스 플랫폼 서버 제품 개발에 적용될 Code Naming Rule 을 기술한다.
팀원간에 원할한 커뮤니케이션과 유지 보수의 효율화를 위해
가급적 일정한 규칙으로 결정하며 팀의 결정에 따라 적용 범위와그 규칙을 명시한다.
그리고 일반화된 표기와 언어별 표기도 구분 정의 하여 개별언어의 환경도 고려해서 표기한다.
본 내용은 개발 상황에 따라 지속적인 수정이 발생할 수 있다.
개발시 반드시 본 규정에 따라 작성 하도록 한다.
Code Naming Rule은 다음의 표기법을 참고하여 정의 하기로 한다.
Hungrian case Camel case Snake case
1. 타입 정의 (Type Define)
-
공통 사항 단어는 기본적으로 명사나 명사형을 사용하며 형용사나 형용사형도 사용 가능.
-
언어 공통 표기 사항
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| Namespace | Name + Name + Name + . + Name | Core, Network.PacketHandler |
| Interface | I + Name + Name | IPCController |
| Abastract Class | Name + Base | EntityBase |
| Generic Class | T + Name + Name | TItem |
| Callback | Handle + _ + NameName | Handle_EventTrigger |
| Class | Name + Name | SkillRunner |
| DB Query Class | DBQ + Name + Name | DBQItemBuyFromShop |
| BusinessLog Class | Name + Name + BusinessLog | ItemBusinessLog |
| Helper Class | Name + Name + Helper | DateTimeHeler |
| Structure | Class 와 동일 | EntityCommonAttrib |
| Enumeration | Name + Name + Type | EntityType |
| Constant | NAME_NAME | INVENTORY_MAX_COUNT |
| 자료 구조 | 구 조 | 예 시 |
|---|---|---|
| Stack, Queue, Map ... | Name + Name + s | Users |
| 특수 타입 재정의 | 구 조 | 예 시 |
|---|---|---|
| 각종 ID | NAME_NAME_ID | USER_ID, CHARACTER_ID |
2. 변수 정의 (Variable Define)
- 공통 사항 단어는 명사나 명사형을 사용하며, Snake Case 형태로 작성 한다. 개발언어나 라이브러리에서 사용중인 단어는 되도록이면 배제하고 대체 단어를 사용한다.
- 언어 공통 표기 사항
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| 전역 변수 | g + _ + variable_name | g_event_handlers |
| 클래스 맴버 변수 | m_ + variable_name | m_user_nickname |
| 지역 변수 | variable_name | user_id |
- C# 맴버 변수 객체 생성 : ObjectType m_variable_name = new(); 지역 변수 객체 생성 : var variable_name = new ObjectType();
3. 함수 정의 (Function Define)
-
공통 사항 동사 + 형용사 or 명사순으로 단어 조합. 대문자 구분 사용하고, Camel Case 형태로 작성 한다.
IDE 도구로 함수 선택시 소문자로 작성된 함수명을 보고 빠르게 구분할 수 있다.
개발언어나 라이브러리에서 사용중인 단어는 되도록이면 배제하고 대체 단어를 사용한다.
-
언어 공통 표기 사항
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| 전역 함수 | g + _ + functionName | Event g_findEvent(EVENT_ID eventId) |
| 객체 맴버 함수 | functionName | Item findItem(ITEM_DB_ID eventId) |
| 객체 초기화 함수 | init | - |
| 객체 소멸화 함수 | destroy | - |
| 객체 맴버 풀 반환 함수 | release | - |
| 인터페이스 함수 | on + FunctionName | virtual Result onInit() |
| 가상 함수 (Callee) | on + FunctionName | override void onTick() |
| 가상 함수 (Caller) | functionName | override void tick() |
| 함수 아규먼트 | nameName | bool onInit(string entityName) |
| 객체 기본 문자열 출력 함수 | toBasicString() | - |
| 객체 개요 문자열 출력 함수 | toSummaryString() | - |
- 언어별 표기 사항
.Net
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| Method-Property | MethodName | UserNickname |
Embeded Script : 주 언어내에서 보조 언어로 사용되는 스크립트
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| Function | language_name + function_name | lua_skill_action |
4. Database 정의 (Database Define)
- 공통 사항 개발언어나 라이브러리에서 사용중인 단어는 되도록이면 배제하고 대체 단어를 사용한다.
RDB :
- 동사 + 형용사 or 명사순으로 단어 조합. 대문자 구분 사용하고, Camel Case 형태로 작성 한다.
| 종 류 | 용 도 | 구 조 | 예 시 |
|---|---|---|---|
| Database | 일반 DB 이름 | NameName-Db ( Name & Name 사이에 ‘–‘ 가능 ) | Game-Db, Game-Trade-Db |
| Table | 일반 Table 이름 | TblNameName | TblCharacter, TblItem |
| Field | 일반 Table 필드 이름 | name_name | character_db_id |
| Procedure | 특정 정보의 형태를 읽기 | usp_function_name_get | usp_character_get |
| 주요 컨텐츠의 관련 로직을 수행 하기 | usp_function_name_logic_name | usp_guild_ranking_sort | |
| 서비스 전용 프로시져 | ssp_function_name | ssp_character_remove_all_by_policy | |
| 운영 전용 프로시져 | gsp_function_name | gsp_item_add | |
| Function | 특정 정보의 형태를 읽기 | fn_function_name_get | fn_db_version_get |
| 주요 컨텐츠의 관련 로직을 수행 하기 | fn_function_name_logic_name | fn_error_to_string | |
NoSQL :
- 동사 + 형용사 or 명사순으로 단어 조합. SnakeCase or Camel Case 형태로 작성 한다.
| 종 류 | 용 도 | 구 조 | 예 시 |
|---|---|---|---|
| Database | 일반 DB 이름 | name_name (name & name 사이에 밑줄('_') or 하이픈('-') 사용) | game_db, game-trade |
| Collection or Table | 일반 Collection or Table 이름 | name_name or NameName (복수형은 끝에 s 추가) | character, items, CharacterInven |
| Field | 일반 필드 이름 | name_name or NameName or nameName | character_db_id |
5. 주요 시스템 정책 정의 (Policy Define)
- 공통 사항 단어는 명사나 명사형을 사용
- 언어 공통 표기 사항
| 종 류 | 구 조 | 예 시 |
|---|---|---|
| 컨텐츠 규칙 | NameName + Rule | PvPModeRule |
| 컨텐츠 규칙 정의 | NameName + Policy | PvPKillPolicy |
6. namespace 표기 정의 (Namespace Notation Define)
-
공통 사항 단어는 명사나 명사형을 사용 많은 namespace가 정의되지 않도록 되도록이면 Class명을 적절하게 정의하도록 한다.
-
언어 공통 표기 사항
범 위 정 의 구 조 예 시 로직 최상위 모듈 최상위 계층 NameName BotClient 핵심 로직 핵심 계층 NameName Core, EngineCore 패킷 처리 패킷 처리 계층 NameName PacketHandler 웹 로직 웹 Api, Ui 계층 NameName Web, BuillingWeb 공통 로직 공통 로직 계층 NameName Common, ServerCommon 사업 로그 사업 로그 계층 NameName BusinessLogDomain 로직 테스트 테스트 계층 NameName Tests, BattleTest
7. 모듈 참조 표기 정의 (Module Reference Notation Define)
-
공통 사항
기본적으로 IDE 도구를 통해 쉽게 관리하는 기능을 제공 한다면, 하기의 표기 정책은 무시 한다.
각 참조 모듈을 계층적으로 구분하여 파일 상단에 구분 작성 한다.
-
언어 공통 표기 사항
| 종 류 | 위치 |
|---|---|
| .Net | 1 번 |
| 기타 외부 모듈 | 2 번 |
| 내부 모듈 | 3 번 |
| 모듈 타입 재정의 | 4 번 |
- 위치의 예
@ 1번 위치
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ 2번 위치
using Nettention.Proud;
using StackExchange.Redis;
using Amazon.DynamoDBv2.Model;
@ 3번 위치
using ServerCore;
using ServerCommon.Redis;
$ 4번 위치
using SESSION_ID = System.UInt32
using DynamoDBQuerier = ServerCommon.MainDB;
8. 주 석 (Description)
- 공통 사항 해당 로직의 주된 기능을 작성하여 로직 분석에 도움을 줄 수 있도록 작성 되어야 한다.
- 언어 공통 표기 사항
* Single-Line 주석 : 해당 로직의 윗 라인에 작성 한다.
// 주요 내용 - author
예)
// 블라 블라 블라 - kangms
* Multi-Line 주석 : 해당 로직의 윗 라인에 작성 한다.
//========================================================================= (100 Column)
// 주요 내용
// author
//========================================================================= (100 Column)
예)
//=========================================================================
// 블라 블라 블라
// author
//=========================================================================
* Class 주석 : Class 정의 상단에 작성 한다.
//========================================================================= (100 Column)
// 클래스 개요 설명
// 주요 내용
// author
//========================================================================= (100 Column)
Swagger : C#
- XML Documentation Comments를 사용 한다.
예)
/// <summary>
/// 새 게시글을 생성합니다.
/// </summary>
/// <param name="request">게시글 생성 요청 정보</param>
/// <returns>생성된 게시글 정보</returns>
/// <response code="201">게시글이 성공적으로 생성됨</response>
/// <response code="400">요청 데이터가 유효하지 않음</response>
[HttpPost]
[ProducesResponseType(typeof(PostDto), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult createPost([FromBody] CreatePostRequest request)
{
// ...
}