유니티 Naming and Code Style Tips For C# scripting

작성된 글은 아래 내용을 정리한 내용입니다.

 

Naming and Code Style Tips for C# Scripting in Unity

Pick up best practices for styling your C# code in Unity. These tips can help you and your team create a cleaner, more readable and scalable codebase.

unity.com


Casing terminology

Case Type  Description Example
Pascal Case 첫 글자와 각 단어의 첫 글자를 대문자로 표기합니다. MyExampleText
Camel Case 첫 단어의 첫 글자는 소문자로, 그 이후의 단어의 첫 글자는 대문자로 표기합니다. myExampleText
Snake Case 모든 단어를 소문자로 표기하고, 단어 사이에 언더스코어(_)를 사용합니다. my_example_text
Kebab Case 모든 단어를 소문자로 표기하고, 단어 사이에 하이픈(-)을 사용합니다. my-example-text

 


Fields and Variables

  1. 변수 이름은 명사를 사용 : 변수의 타입이 bool인 경우를 제외하고는 명사를 사용.
  2. boolean에는 (동사 - 접두사)를 사용: 질문에 대한 답은 동사를 접두사로 사용하기, 예를 들어, isDead, isWalking, hasDamageMultiplier 등.
  3. 의미 있는 이름을 사용하기, 줄임말을 사용하지 말기(단, 수학은 제외): 변수 이름은 그들의 의도를 드러내야 하고, 발음하기 쉽고 검색하기 쉬운 이름을 선택해야 합니다. 단일 문자 변수는 루프와 수학 표현식에는 괜찮습니다.
  4. 공용 필드에는 파스칼 케이스를 사용하고, 비공개 변수에는 카멜 케이스를 사용: public 필드의 대안으로, 공용 "getter"가 있는 속성을 사용할 수 있습니다.
public float DamageMultiplier = 1.5f;
public float MaxHealth;
public bool IsInvincible;

private bool _isDead;
private float _currentHealth;

// parameters
public void InflictDamage(float damage, bool isSpecialDamage)
{
    // local variable
    int totalDamage = damage;

    // local variable versus public member variable
    if (isSpecialDamage)
    {
    	totalDamage *= DamageMultiplier;
    }

    // local variable versus private member variable
    if (totalDamage > _currentHealth)
    {
        /// ...
    }
}

Enums

  1. Enum 이름과 값에는 파스칼 케이스를 사용하세요.
  2. Enum 이름에는 단수 명사를 사용하세요.
참고: System.FlagsAttribute로 표시된 비트 단위 Enum은 이 규칙의 예외입니다. 이들은 한 가지 이상의 타입을 나타내므로 일반적으로 복수형으로 만듭니다.

 

// Enums use singular nouns …
public enum WeaponType
{
    Knife,
    Gun,
    RocketLauncher, 
    BFG
}

public enum FireMode
{
    None = 0,
    Single = 5,
    Burst = 7,
    Auto = 8, 
}

// … but a bitwise enum is plural.
[Flags] 
public enum AttackModes 
{
  // Decimal                          // Binary
   None = 0,                          // 000000
   Melee = 1,                         // 000001
   Ranged = 2,                        // 000010
   Special = 4,                       // 000100

   MeleeAndSpecial = Melee | Special  // 000101
}

 


Classes and Interfaces

  1. 클래스 이름에는 파스칼 케이스 명사를 사용 : 예를 들어, MyClass, EmployeeRecord 등입니다.
  2. 인터페이스 이름에는 대문자 "I"를 접두사로 사용 : 예를 들어, IDisposable, IEnumerable 등입니다.

Methods

  1. 이름은 동사로 시작 : 예를 들어, GetDirection, FindTarget 등입니다.
  2. 매개변수에는 카멜 케이스를 사용 : 메서드로 전달되는 매개변수는 '로컬 변수'처럼 형식화하기.
  3. bool을 반환하는 메서드는 질문을 하는 방식을 사용 : Boolean 변수 자체와 마찬가지로, 메서드가 참-거짓 조건을 반환하면 동사로 시작하는 질문 형태로 표현하면 됩니다. 예를 들어, IsGameOver, HasStartedTurn 등입니다.
// EXAMPLE: Methods start with a verb.
public void SetInitialPosition(float x, float y, float z)
{
    transform.position = new Vector3(x, y, z);
}

// EXAMPLE: Methods ask a question when they return bool.
public bool IsNewPosition(Vector3 currentPosition)
{
    return (transform.position == newPosition);
}

Use verbs

 

  1. 동사 구를 사용 : 이벤트를 동사 구로 명명하세요. 상태 변경을 정확하게 전달하는 동사를 선택하는 것이 중요합니다.
  2. 현재 분사 또는 과거 분사를 사용 : 이벤트의 상태가 이전인지 이후인지를 나타내려면 현재 분사 또는 과거 분사를 사용하세요. 예를 들어, 문을 여는 이벤트 이전에는 "OpeningDoor"를, 이후에는 "DoorOpened"를 지정하세요.
// EXAMPLE: Events 

// using System.Action delegate

public event Action OpeningDoor;    // event before
public event Action DoorOpened;     // event after

public event Action<int> PointsScored;
public event Action<CustomEventArgs> ThingHappened;

 

C#에서 이벤트를 발생시키는 메서드(주체에서)에는 "On"을 접두사로 사용하는 것이 일반적입니다. 이벤트를 호출하는 주체는 일반적으로 "On"으로 시작하는 메서드에서 이를 수행합니다. 예를 들어, “OnOpeningDoor” 또는 "OnDoorOpened"와 같이 사용할 수 있습니다.

public class Door
{
    public event Action DoorOpened;

    public void Open()
    {
        // Some logic to open the door...

        // Raise the event.
        OnDoorOpened();
    }

    protected virtual void OnDoorOpened()
    {
        DoorOpened?.Invoke();
    }
}