[C#] C# .NET 코딩 규칙
Posted: Updated:
일반적인 C# 코딩 규칙
명명 규칙
✔ 간결성보다는 가독성에 중점을 둔다.
✔ 밑줄, 하이픈, 기타 영숫자가 아닌 문자를 사용하지 않는다.
✔ 약어, 머리글자어를 사용하지 않는다. 대/소문자 표기법 참고
PascalCasing
✔ 모든 상수, 지역 변수, 필드의 이름, 로컬 함수를 포함한 모든 메서드 이름에 파스칼 대/소문자(PascalCasing)를 사용한다.
✔ 예외: interop 코드, 이벤트 핸들러
public class DataService
{
}
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
public struct ValueCoordinate
{
}
✔ 인터페이스 이름에서는 I 접두사를 붙인 뒤 파스칼 케이스를 사용한다.
public interface IWorkerQueue
{
}
camelCasing
✔ parameter(매개변수)에는 카멜 대/소문자(camelCasing)를 사용하고 _ 접두사를 붙인다.
public T SomeMethod<T>(int someNumber, bool isValid)
{
}
✔ internal 필드, private 에는 카멜 대/소문자(camelCasing)를 사용하고 _ 접두사를 붙인다.
public class DataService
{
private IWorkerQueue _workerQueue;
}
✔ static 인 경우 s_, 정적 스레드인 경우 t_ 접두사를 붙인다.
public class DataService
{
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
}
머리글자어에 대한 대문자 표시 규칙
✔ 머리글자어(DB, XML, IO, HTML)들은 머리글자어의 길이와 파스칼/카멜 방식에 따라 대문자 표시를 다르게 한다.
파스칼 케이스의 경우
✔ 두 글자 머리글자어의 두 문자는 대문자로 표시한다.
✔ 세 개 이상의 문자로 이루어진 머리글자어는 첫 문자만 대문자로 표시한다.
예시: DBRate, XmlWriter
카멜 케이스의 경우
✔ 글자 수에 상관 없이 머리글자어가 첫 단어인 경우 모두 소문자로 표시한다.
예시: xmlStream, dbServerName
✔ 첫 단어로 사용되지 않는 두 글자 머리글자어는 대문자로 표시한다.
✔ 첫 단어로 사용되지 않는 세 개 이상의 문자로 이루어진 머리글자어는 첫 문자만 대문자로 표시한다.
예시: channelID, readerXml
레이아웃 규칙
✔ 기본 코드 편집기 설정(스마트 들여쓰기, 4자 들여쓰기, 탭을 공백으로 저장)을 사용한다.
✔ 각 중괄호가 새 줄에서 시작되는 Allman 스타일 중괄호를 사용한다.
✔ 선언은 한 줄에 하나씩만 작성한다.
✔ 메서드 정의와 속성 정의 간에는 빈 줄을 하나 이상 추가한다.
if ((val1 > val2) && (val1 > val3))
{
// Take appropriate action.
}
if문
✔ 단일 if 문 사용 시 한 줄 형식을 사용하지 않는다.
✔ 중괄호 사용은 항상 허용되며, 모든 블록의 본문이 한 줄에 있는 경우에만 생략할 수 있다.
public ObservableLinkedList(IEnumerable<T> items)
{
if (items == null)
throw new ArgumentNullException(nameof(items));
}
if (handler != null)
{
handler(this, e);
}
주석 달기 규칙
✔ 코드 줄의 끝이 아닌 별도의 줄에 주석을 배치한다.
✔ 주석 텍스트는 대문자로 시작하고, 끝에는 마침표를 붙인다.
✔ 주석 구분 기호와 텍스트 사이에 공백을 하나 삽입한다.
✔ 별표 블록으로 주석을 묶지 않는다.
// The following declaration creates a query. It does not run
// the query.
예제
using System;
namespace MyExampleNamespace
{
public class Customer : IDisposable
{
private string _customerName;
public string CustomerName
{
get
{
return _customerName;
}
set
{
_customerName = value;
_lastUpdated = DateTime.Now;
}
}
private DateTime _lastUpdated;
public DateTime LastUpdated
{
get
{
return _lastUpdated;
}
private set
{
_lastUpdated = value;
}
}
public void UpdateCustomer(string newName)
{
if (!newName.Equals(CustomerName))
{
CustomerName = newName;
}
}
public void Dispose()
{
//Do nothing
}
}
}
📝 참조
.NET 코딩 스타일
Microsoft Learn C# 가이드
Microsoft Learn .NET 클래스 라이브러리 개발을 위한 디자인 지침
위키책 C# 프로그래밍/명명 규칙
댓글남기기