[C#] 구글 C# 코딩 스타일

참조


Formatting guidelines(서식 지침)

이름 규칙

코드

  • 클래스, 메서드, 열거형, 공용 필드, 공용 속성, 네임스페이스 이름 : Pascal Case
  • 지역 변수 이름, 매개 변수 : Camel Case
  • private, internal, protected, internal field 그리고 properties : Camel Case
  • 명명 규칙은 const, static, readonly 등과 같은 한정자의 영향을 받지 않습니다.
  • 인터페이스 이름은 'I' 로 시작합니다.

파일

  • 파일 이름과 디렉토리 이름은 Pascal Case 사용합니다. (e.g. MyFile.cs)
  • 가능한 경우 파일 이름은 파일의 기본 클래스 이름과 동일해야 합니다.(e.g. MyClass.cs)
  • 일반적으로 파일 당 하나의 코어 클래스를 선호합니다.

조직

  • 수정은 다음과 같은 순서로 발생 합니다. : public protected internal private new abstract virtual override sealed static readonly extern unsafe volatile async.
  • using namespace는 맨 위에 선언합니다. System.* 네임스페이스 제외한 나머지 네임스페이스는 알파벳 순서로 정렬합니다.
  • 클래스 멤버 순서
    • 클래스 멤버들은 다음 순서로 그룹화 합니다.
      • 중첩 된 클래스, 열거형, 대리자 및 이벤트
      • 정적, const 및 읽기 전용 필드
      • 필드 및 속성
      • Constructors and finalizers
      • 메서드
    • 각 그룹 내에서 elements는 다음 순서로 진행되어야 합니다.
      • Public
      • Internal
      • Protected internal
      • Protected
      • Private
    • 가능한 경우 인터페이스 구현을 함께 그룹화 합니다.

C# 코딩 가이드라인

상수

  • const로 만들 수 있는 변수와 필드는 항상 const로 만들어야 합니다.
  • const를 사용할 수 없는 경우 readonly를 사용합니다.
  • magic number(아무 설명없이 쓰는 숫자) 보다 명명된 상수를 선호합니다.

IEnumerable vs IList vs IReadOnlyList

  • 입력의 경우 가능한 가장 제한적인 Collection type을 사용합니다.
    • IReadOnlyCollection/IReadOnlyList/IEnumerable 입력은 불변해야 하는 메서드에 대한 입력으로 사용합니다.
  • 출력의 경우 반환된 컨테이너의 소유권을 소유자에게 전단하는 경우 IEnumerable 보다 IList를 선호합니다.

Property styles

  • 단일 줄 읽기 전용의 속성의 경우 가능하면 식 본문 속성(=>) 을 사용합니다.
  • 다른 모든 경우에는 { get; set; } 구문을 사용합니다.

Field initializers

  • 일반적으로 필드 초기화를 하는것이 좋습니다.

Extension methods

  • 원본 클래스의 소스를 사용할 수 없거나 원본 변경을 수행할 수 없는 경우에만 확장 메서드를 사용합니다.
  • 추가할 기능이 원래 클래스의 소스에 추가하는데 적합한 '핵심' 일반 기능인 경우에만 확장 메서드를 사용합니다.
  • 확장 메서드는 어디서나 사용할 수 있는 코어 라이브러리에만 추가합니다.
  • 일부 코드에서만 사용할 수 있는 확장 기능은 가동성을 해칩니다.
  • 확장 메서드를 사용하면 코드가 복잡해지므로, 사용하지 않는 편이 좋습니다.

ref and out

  • out 키워드는 보통 input 이 아닌 return 으로 사용합니다.
  • 메서드 정의에서 보든 매개 변수 뒤에 'out' 키워드를 배치합니다.
  • 입력 내용이 변경되는 경우에는 'ref' 키워드 사용하지 않습니다.
  • 구조체 전달을 위한 최적화 작업으로 'ref' 키워드 사용하지 않습니다.
  • 수정 가능한 컨테이너를 메서드에 전달하기 위해 'ref' 키워드를 사용하지 않습니다.
  • 'ref' 키워드는 제공된 컨테이너를 완전히 다른 컨테이너 인스턴스로 교체해야 하는 경우에만 사용합니다.

LINQ

  • 일반적으로 LINQ는 긴 체인보다는 한 줄의 LINQ 호출과 명령혈 코드를 선호합니다.
  • 명령형 코드와 심하게 연결된 LINQ를 혼합하면 가독성이 매우 복잡해 집니다.
  • SQL 스타일 LINQ 보단 메스드 방식의 LINQ 선호합니다.
  • 단일문보다 긴 항목에 대해 'Container.ForEach(...)' 구문을 피합니다.

Array vs List

  • 일반적으로 Array 보다 List<> 사용을 선호합니다.
  • 사이즈 변화가 자주 있는 경우, List<> 사용을 선호합니다.
  • 컨테이너의 사이즈가 고정되어 있으면 Array 사용을 선호합니다.

Folders and file locations

  • 프로젝트에 일관성을 유지합니다.
  • 가능하면 평평한 구조를 선호합니다.

Use of tuple as a return type

  • 일반적으로, 복잡한 유형을 반환할때 Tuple<> 보다 명명된 클래스 형식을 선호합니다.

Object Initializer syntax

  • 객체 초기화는 다음과 같이 간편 구문으로 사용합니다.

```csharp
var x = new SomeClass {
Property1 = value1,
Property2 = value2,
};

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY