Files
caliverse_doc/01. 개발정책/CodeConvention.md
2025-05-01 07:27:54 +09:00

13 KiB
Raw Permalink Blame History

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)
{
    // ...
}