코드 스타일 명명 규칙
.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
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기