Home Full Site
C# 코딩: Naming Convention

명칭에 대한 규칙(Naming Convention)에 대해서는 .NET Framework Design Guidelines 에 자세히 정리되어 있으므로 이 책을 참조하면 좋다. 여기서는 그 중 중요한 사항들만을 요약 정리해 본다. 특히, Naming Convention에 대해 다른 프로그래밍 언어로 개발한 개발자들은 그 동안의 습관으로 인해 다른 의견을 가질 수 있다.



  • C#에서 Hungarian notation을 사용하지 않는다. Hungarian notation은 예전에 변수명 앞에 자료형을 나타내는 1~2 문자를 첨가했던 것인데, Intellisense의 도움의 그 의미가 많이 줄어 들었다. 변수명은 그 데이타 타입보다 변수가 담는 내용을 표현하는데 촛점을 맞춘다.
    [Hungarian notation 예] bLive, szName, iVal //나쁜표현

  • 멤버 필드에 대해 _ , m_ , s_ 같은 접두어(prefix)를 붙이지 않는다. (주: 개발팀에 따라 필드에 _, m_, s_ prefix를 권장하는 경우도 있다)
    //나쁜표현bool _success;int m_Index;

  • 클래스 멤버들을 명시적으로 표시하기 위하여 필드, 메서드, 속성, 이벤트 등의 멤버 앞에 this. 를 붙여 준다. 예를 들어, 필드명 name 대신 this.name 을 사용한다. 이는 클래스 멤버를 명시적으로 표현해 코드 가독성을 높일 수 있다. (주: 개발팀에 따라 this. 를 붙이지 않는 것을 권장하는 경우도 있다)
  • 인터페이스명은 항상 I로 시작한다.
    public interface IAlterable { }

  • Generics 클래스의 Generic 파라미터 타입은 가능하면 T와 같이 한 문자를 선택한다. (복수 타입 파라미터가 필요하면 예외)
    public class MyList //나쁜표현public class MyList //좋은표현

  • boolean 형의 변수/필드는 가능하면 is, has, can 등의 접두어를 붙여서 의미가 명료하게 한다.
    bool bAlive //나쁜표현
    bool isAlive //좋은표현

  • 클래스명, enum명, 대리자(delegate)명에는 어떤 Prefix도 붙이지 않는다.
    public enum EOrderType //나쁜 표현

  • 클래스명, 메서드명, 속성명 등의 명칭에 축약된 단어를 사용하지 않는다.
    public int GetWindow() //좋은 표현public int GetWin() //나쁜 표현

  • 꼭 필요하거나 널리 알려진 용어는 축약형을 사용할 수 있다. 예를 들어, UserInterface를 UI 로 축약하거나 Online Analytical Processing 을 Olap으로 축약할 수 있다.
  • 축약형을 사용할 경우에는 2자까지는 모두 대문자로, 2자 초과인 경우는 Pascal Casing이나 Camel Casing을 사용한다.
    HTMLButton //나쁜 표현HtmlButton //좋은 표현System.Io //나쁜 표현System.IO //좋은 표현

  • 메서드는 행위를 나타내므로 동사(verb)를 사용한다.
    public int Addition(int a, int b) //나쁜 표현public int Add(int a, int b) //좋은 표현

  • 필드나 속성 혹은 로컬변수는 명사(noun)를 사용한다.
    private bool createTable //나쁜 표현private bool newTable //좋은 표현

  • 이벤트는 가능하면 동사형으로 표현한다.
    public event EventHandler Completion //나쁜 표현public event EventHandler Completed //좋은 표현

  • 로컬변수는 가능하면 의미있는 단어를 선택한다.
    int i, j //나쁜 표현int startIndex, endIndex //좋은 표현

  • 조직의 계층구조를 본 따서 namespace의 계층구조를 만들지 않는다.
© csharpstudy.com