코드 스타일 명명 규칙
.editorconfig 파일에서 .NET 프로그래밍 언어 코드 요소(예: 클래스, 속성 및 메서드)에 대한 명명 규칙을 정의하고 컴파일러 또는 IDE에서 이러한 규칙을 적용하는 방법을 정의할 수 있습니다. 예를 들어 대문자로 변환되지 않은 공용 멤버를 컴파일러 오류로 처리하거나 프라이빗 필드가 시작 _
되지 않으면 빌드 경고가 발생되도록 지정할 수 있습니다.
특히 다음 세 부분으로 구성된 명명 규칙을 정의할 수 있습니다.
- 규칙이 적용되는 기호 그룹(예: 공용 멤버 또는 전용 필드).
- 규칙에 연결할 명명 스타일(예: 이름을 대문자화하거나 밑줄로 시작해야 함).
- 기호 그룹에 포함된 코드 요소가 명명 스타일을 따르지 않는 경우 메시지의 심각도 수준입니다.
일반 구문
위의 엔터티(명명 규칙, 기호 그룹 또는 명명 스타일)를 정의하려면 다음 구문을 사용하여 하나 이상의 속성을 설정합니다.
<kind>.<entityName>.<propertyName> = <propertyValue>
지정된 kind
엔터티 정의에 대한 모든 속성 설정과 entityName
해당 엔터티 정의를 구성합니다.
각 속성은 한 번만 설정해야 하지만 일부 설정에서는 쉼표로 구분된 여러 값을 사용할 수 있습니다.
속성의 순서는 중요하지 않습니다.
<종류> 값
<kind> 는 정의되는 엔터티 종류(명명 규칙, 기호 그룹 또는 명명 스타일)를 지정하며 다음 중 하나여야 합니다.
속성 설정 대상 | <종류> 값 사용 | 예시 |
---|---|---|
명명 규칙 | dotnet_naming_rule |
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion |
기호 그룹 | dotnet_naming_symbols |
dotnet_naming_symbols.interface.applicable_kinds = interface |
명명 스타일 | dotnet_naming_style |
dotnet_naming_style.pascal_case.capitalization = pascal_case |
<entityName>
<entityName> 은 여러 속성 설정을 단일 정의에 연결하는 설명이 포함된 이름입니다. 예를 들어, 다음 속성은 두 개의 기호 그룹 정의 interface
및 types
를 생성하고 각 정의에 두 개의 속성을 설정합니다.
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum, delegate
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
<propertyName> 및 <propertyValue>
각 엔터티 종류(명명 규칙, 기호 그룹 또는 명명 스타일)에는 다음 섹션에 설명된 대로 지원되는 고유한 속성이 있습니다.
기호 그룹 속성
기호 그룹에 대해 다음 속성을 설정하여 그룹에 포함되는 기호를 제한할 수 있습니다. 단일 속성에 여러 값을 지정하려면 값을 쉼표로 구분합니다.
속성 | 설명 | 허용된 값 | 필수 |
---|---|---|---|
applicable_kinds |
그룹 내 기호의 종류 1 | * (모든 기호를 지정하려면 이 값을 사용합니다.)namespace class struct interface enum property method field event delegate parameter type_parameter local local_function |
예 |
applicable_accessibilities |
그룹 내 기호의 액세스 가능성 수준 | * (모든 액세스 가능성 수준을 지정하려면 이 값을 사용합니다.)public internal 또는 friend private protected protected_internal 또는 protected_friend private_protected local (메서드 내에 정의된 기호의 경우) |
예 |
required_modifiers |
지정된 한정자를 ‘모두’ 포함하는 기호만 일치 2 | abstract 또는 must_inherit async const readonly static 또는 shared 3 |
아니요 |
참고:
- 튜플 멤버는 현재
applicable_kinds
에서 지원되지 않습니다. - 기호 그룹은
required_modifiers
속성의 ‘모든’ 한정자와 일치합니다. 이 속성을 생략하면 일치 항목에 특정 한정자가 필요하지 않습니다. 즉, 기호 한정자가 이 규칙의 적용 여부에 영향을 주지 않습니다. - 그룹이
required_modifiers
속성에static
또는shared
를 포함하는 경우 이 그룹은const
기호도 포함합니다. 이들은 암시적으로static
/Shared
이기 때문입니다. 그러나static
명명 규칙을const
기호에 적용하지 않으려면const
의 기호 그룹을 사용하여 새 명명 규칙을 만들 수 있습니다. 새 규칙은 규칙 순서에 따라 우선합니다. class
에는 C# 레코드가 포함됩니다.
명명 스타일 속성
명명 스타일은 명명 규칙을 사용하여 적용하려는 규칙을 정의합니다. 예시:
PascalCase
를 사용하여 대문자화m_
으로 시작_g
로 끝남__
를 사용하여 단어를 구분
명명 스타일에 대해 다음 속성을 설정할 수 있습니다.
속성 | 설명 | 허용된 값 | 필수 |
---|---|---|---|
capitalization |
기호 내의 단어에 대한 대/소문자 스타일 | pascal_case camel_case first_word_upper all_upper all_lower |
예1 |
required_prefix |
이 문자로 시작해야 함 | 아니요 | |
required_suffix |
이 문자로 끝나야 함 | 아니요 | |
word_separator |
기호 내에서 이 문자를 사용하여 단어를 구분해야 함 | 아니요 |
참고:
- 명명 스타일의 일부로 대/소문자 스타일을 지정해야 하고, 그렇지 않으면 명명 스타일이 무시될 수 있습니다.
명명 규칙 속성
규칙이 적용되려면 모든 명명 규칙 속성이 필요합니다.
속성 | 설명 |
---|---|
symbols |
다른 곳에 정의된 기호 그룹의 이름입니다. 명명 규칙은 이 그룹의 기호에 적용됩니다. |
style |
이 규칙과 연결되어야 하는 명명 스타일의 이름입니다. 스타일은 다른 곳에서 정의됩니다. |
severity |
명명 규칙을 적용하는 데 사용되는 심각도를 설정합니다. 연결된 값을 사용 가능한 심각도 수준중 하나로 설정합니다.1 |
참고:
- 명명 규칙 내의 심각도 사양은 Visual Studio와 같은 개발 IDE 내에서만 적용됩니다. 이 설정은 C# 또는 VB 컴파일러에서 인식되지 않으므로 빌드하는 동안에는 적용되지 않습니다. 빌드에 명명 스타일 규칙을 적용하려면 코드 규칙 심각도 구성을 사용하여 심각도를 설정해야 합니다. 자세한 내용은 해당 GitHub 이슈를 참조하세요.
규칙 순서
EditorConfig 파일 내에서 명명 규칙이 정의되는 순서는 중요하지 않습니다. 명명 규칙은 규칙 자체의 정의에 따라 자동으로 정렬됩니다. 접근성, 한정자 및 기호에 대한 보다 구체적인 규칙이 덜 구체적인 규칙보다 우선합니다. 규칙 간에 겹치거나 규칙 순서가 문제를 일으키는 경우 두 규칙의 교집합을 파생된 광범위한 규칙보다 우선하는 새 규칙으로 나눌 수 있습니다. 예를 들어 예제: 겹치는 명명 전략 및 예제: const
한정자 포함 static
및 readonly
.
EditorConfig 언어 서비스 확장은 EditorConfig 파일을 분석하고, 파일의 규칙 순서가 런타임에 컴파일러에서 사용할 순서와 다른 경우를 보고할 수 있습니다.
참고 항목
Visual Studio 2019 이전 버전의 Visual Studio를 사용하는 경우 이름 지정 규칙은 EditorConfig 파일에서 가장 특정한 버전에서 최소로 정렬되어야 합니다. 적용할 수 있는 첫 번째 규칙은 적용되는 유일한 규칙이 됩니다. 그러나 동일한 이름의 규칙 ‘속성’이 여러 개 있는 경우 가장 최근에 발견된 해당 이름의 속성이 우선 적용됩니다. 자세한 내용은 파일 계층 구조 및 우선 순위를 참조하세요.
예: 겹치는 명명 전략
다음 두 가지 명명 규칙을 고려합니다.
- 공용 메서드는 PascalCase입니다.
- 비동기 메서드는 .로
"Async"
끝납니다.
메서드의 경우 public async
어떤 규칙이 우선적으로 적용되는지는 분명하지 않습니다. 메서드에 대한 public async
새 규칙을 만들고 명명을 정확하게 지정할 수 있습니다.
예: const
한정자 포함 static
및 readonly
다음 두 가지 명명 규칙을 고려합니다.
- 상수 필드는 PascalCase입니다.
- 공용
static
필드가 아닌 필드는 s_camelCase.
규칙 2는 더 구체적이며 우선적으로 적용되므로 모든 비공용 상수 필드는 s_camelCase. 이 문제를 해결하려면 교차 규칙을 정의할 수 있습니다. 공용이 아닌 상수 필드는 PascalCase입니다.
기본 명명 스타일
사용자 지정 명명 규칙을 지정하지 않으면 다음 기본 스타일이 사용됩니다.
모든 액세스 가능성의 클래스, 구조체, 열거형, 속성 및 이벤트에 대한 기본 명명 스타일은 파스칼식 대/소문자입니다.
모든 액세스 가능성의 인터페이스에 대한 기본 명명 스타일은 필수 접두사 I를 사용하는 파스칼 대/소문자입니다.
코드 규칙 ID: IDE1006 (Naming rule violation)
모든 명명 옵션에는 규칙 ID IDE1006
및 제목 Naming rule violation
이 있습니다. 다음 구문을 사용하여 EditorConfig 파일에서 전역적으로 명명 규칙 위반의 심각도를 구성할 수 있습니다.
dotnet_diagnostic.IDE1006.severity = <severity value>
심각도 값은 빌드 시 적용해야 하는 warning
또는 error
여야 합니다. 가능한 모든 심각도 값은 심각도 수준을 참조하세요.
예: 공용 멤버 대문자
다음 .editorconfig 파일에는 표시된 readonly
공용 속성, 메서드, 필드, 이벤트 및 대리자를 대문자로 지정하는 명명 규칙이 포함되어 있습니다. 이 명명 규칙은 쉼표로 값을 구분하여 규칙을 적용할 여러 종류의 기호를 지정합니다.
[*.{cs,vb}]
# Defining the 'public_symbols' symbol group
dotnet_naming_symbols.public_symbols.applicable_kinds = property,method,field,event,delegate
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public
dotnet_naming_symbols.public_symbols.required_modifiers = readonly
# Defining the 'first_word_upper_case_style' naming style
dotnet_naming_style.first_word_upper_case_style.capitalization = first_word_upper
# Defining the 'public_members_must_be_capitalized' naming rule, by setting the
# symbol group to the 'public symbols' symbol group,
dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols
# setting the naming style to the 'first_word_upper_case_style' naming style,
dotnet_naming_rule.public_members_must_be_capitalized.style = first_word_upper_case_style
# and setting the severity.
dotnet_naming_rule.public_members_must_be_capitalized.severity = suggestion
예: 밑줄이 있는 프라이빗 인스턴스 필드
이 .editorconfig 파일 조각은 프라이빗 인스턴스 필드가
기호 그룹이 없는 식별자(예 static
readonly
: 인스턴스 필드가 없 static
으므로)가 아닌 식별자에 따라 기호 그룹을 정의할 수 있으므로 다음 두 가지 명명 규칙을 정의해야 합니다.
- 모든 프라이빗 필드에
static
는 컴파일러error
로 명명 스타일이 적용되어야 합니다underscored
. - 프라이빗 필드에
static
는underscored
심각도 수준으로none
명명 스타일이 적용되어야 합니다. 즉, 이 경우를 무시합니다.
[*.{cs,vb}]
# Define the 'private_fields' symbol group:
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
# Define the 'private_static_fields' symbol group
dotnet_naming_symbols.private_static_fields.applicable_kinds = field
dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_static_fields.required_modifiers = static
# Define the 'underscored' naming style
dotnet_naming_style.underscored.capitalization = pascal_case
dotnet_naming_style.underscored.required_prefix = _
# Define the 'private_fields_underscored' naming rule
dotnet_naming_rule.private_fields_underscored.symbols = private_fields
dotnet_naming_rule.private_fields_underscored.style = underscored
dotnet_naming_rule.private_fields_underscored.severity = error
# Define the 'private_static_fields_none' naming rule
dotnet_naming_rule.private_static_fields_none.symbols = private_static_fields
dotnet_naming_rule.private_static_fields_none.style = underscored
dotnet_naming_rule.private_static_fields_none.severity = none
또한 이 예제에서는 엔터티 정의를 다시 사용할 수 있음을 보여 줍니다. underscored
명명 스타일은 명명 규칙과 private_static_fields_none
명명 규칙 모두에서 private_fields_underscored
사용됩니다.
참고 항목
.NET