본문 바로가기

개발/협업

[Naming Conventions] for c#

 

팀 단위로 개발을 진행하다보면, 각 클래스, 변수, 함수 등은 어떻게 이름을 지어야 유지보수에 좋고 가독성이 좋은지 고민하게된다.

변수명을 아무렇게 지으면.. 나중에 수정할때 고통받는다.

 

1. Naming Convention

각 이름을 짓는 방법이 있다. 종류와 예시는 다음과 같다.

 

- Camel Case

  각 단어는 붙여쓰고, 첫 단어를 제외한 나머지 단어의 첫글자는 대문자로

  ex) camelCase, playerController ...   

 

- Pascal Case

  각 단어의 첫 글자는 대문자로, 나머지는 소문자로

  ex) PlayerController, GameController ... 

 

- Snake Case

  단어는 소문자만 써서, 각 단어는 언더바 '_' 로 구분지어 표현

  ex) snake_case, player_controller, (대문자로만 쓰는 표현은 Screaming Snake case)GAME_CONTROLLER

 

- Kebab Case

  각 단어사이를 하이푼 '-'으로 구분하여 표현

  ex) Kebab-Case, player-controller

 

 

2. c# 공식 convention

마이크로소프트 .NET의 c#문서를 보면 다음과같이 convention이 존재하는것을 확인할 수 있다.

대표적인 내용을 정리해볼 시 다음과 같다.

 

  • 인터페이스 이름은 대문자I로시작
  • 열거형은 단수명사사용, 플래그인경우 복수명사사용
  • 변수, 메서드 및 클래스에 의미있고 설명이 포함된 이름 사용
  • 클래스 이름, 매서드이름에 PascalCase사용
  • 필드와 로컬상수 모두의 상수 이름에 PascalCase사용
  • 메서드, 매개변수, 지역변수에 camelCase사용
  • private instance필드는 언더바 '_'로 시작하고 나머지 텍스트는 camelCased
  • 정적필드는 s_로 시
public class DataService
{
	// A public field, these should be used sparingly
    public bool IsValid;
    
    // Delegate
    public delegate void DelegateType(string message);
    
    
    // Method
    public void StartEventProcessing()
    {
        // Local function
        static int CountQueueItems() => WorkerQueue.Count;
        // ...
    }
    
}


//interface Starts with I
public interface IWorkerQueue
{
}



public class DataService
{
	//camelCasing
    private IWorkerQueue _workerQueue;
    
    //camelCasing for parameter
    public T SomeMethod<T>(int someNumber, bool isValid)
    {
    }
}

 

  • Gneric의 경우 

- 단일 문자 이름이 완전히 설명적이라서 설명이 포함된 이름이 가치가 없다면, 제네릭 형식 매개 변수의 이름을 설명적인 이름으로 지정

- 형식에 단일 문자 형식 매개 변수가 있을 경우, 형식 매개 변수 이름으로 사용을 T 고려

- "T"로 설명 유형 매개 변수 이름을 접두사로 붙임 등이 있다.

 

public interface ISessionChannel<TSession> { /*...*/ }
public delegate TOutput Converter<TInput, TOutput>(TInput from);
public class List<T> { /*...*/ }


public int IComparer<T>() => 0;
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T : struct { /*...*/ }


public interface ISessionChannel<TSession>
{
    TSession Session { get; }
}

 

 

 

3. 추후활용방안

- 프로젝트 진행시 전체 convention과 함께 naming convention도 정의하여, 협업 시 혼선이없도록 방지가능

- 코드 규칙고 같이 참고하면, 코드 가독성 향상가능, 유지보수에 도움이 된다.

 

참고자료 : https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/identifier-names

 

식별자 이름 - 규칙 및 관례 - C#

C# 프로그래밍 언어의 유효한 식별자 이름에 대한 규칙을 알아봅니다. 또한 .NET 런타임 팀과 .NET 문서 팀에서 사용하는 일반적인 명명 규칙을 알아봅니다.

learn.microsoft.com