[C#] 구글 C# 코딩 스타일
- C#/C# 문법
- 2023. 2. 25. 07:04
참조
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
'C# > C# 문법' 카테고리의 다른 글
DevExpress Chart 기능 POC - Stack Bar Chart (0) | 2023.02.28 |
---|---|
DevExpress Chart 기능 POC - Annotation 점선 표시 기능 (0) | 2023.02.28 |
[C#] 헤드퍼스트 디자인패턴 - 전략패턴 (0) | 2023.02.22 |
[C# 문법] Linq Aggregate vs String.Join (0) | 2022.12.08 |
서로 다른 Class 에서 Action 콜백 호출하기 (0) | 2022.12.08 |
이 글을 공유하기