코드 스타일 명명 규칙

.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> 은 여러 속성 설정을 단일 정의에 연결하는 설명이 포함된 이름입니다. 예를 들어, 다음 속성은 두 개의 기호 그룹 정의 interfacetypes를 생성하고 각 정의에 두 개의 속성을 설정합니다.

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 또는 shared3
아니요

참고:

  1. 튜플 멤버는 현재 applicable_kinds에서 지원되지 않습니다.
  2. 기호 그룹은 required_modifiers 속성의 ‘모든’ 한정자와 일치합니다. 이 속성을 생략하면 일치 항목에 특정 한정자가 필요하지 않습니다. 즉, 기호 한정자가 이 규칙의 적용 여부에 영향을 주지 않습니다.
  3. 그룹이 required_modifiers 속성에 static 또는 shared를 포함하는 경우 이 그룹은 const 기호도 포함합니다. 이들은 암시적으로 static/Shared이기 때문입니다. 그러나 static 명명 규칙을 const 기호에 적용하지 않으려면 const의 기호 그룹을 사용하여 새 명명 규칙을 만들 수 있습니다. 새 규칙은 규칙 순서따라 우선합니다.
  4. class에는 C# 레코드가 포함됩니다.

명명 스타일 속성

명명 스타일은 명명 규칙을 사용하여 적용하려는 규칙을 정의합니다. 예시:

  • PascalCase를 사용하여 대문자화
  • m_으로 시작
  • _g로 끝남
  • __를 사용하여 단어를 구분

명명 스타일에 대해 다음 속성을 설정할 수 있습니다.

속성 설명 허용된 값 필수
capitalization 기호 내의 단어에 대한 대/소문자 스타일 pascal_case
camel_case
first_word_upper
all_upper
all_lower
1
required_prefix 이 문자로 시작해야 함 아니요
required_suffix 이 문자로 끝나야 함 아니요
word_separator 기호 내에서 이 문자를 사용하여 단어를 구분해야 함 아니요

참고:

  1. 명명 스타일의 일부로 대/소문자 스타일을 지정해야 하고, 그렇지 않으면 명명 스타일이 무시될 수 있습니다.

명명 규칙 속성

규칙이 적용되려면 모든 명명 규칙 속성이 필요합니다.

속성 설명
symbols 다른 곳에 정의된 기호 그룹의 이름입니다. 명명 규칙은 이 그룹의 기호에 적용됩니다.
style 이 규칙과 연결되어야 하는 명명 스타일의 이름입니다. 스타일은 다른 곳에서 정의됩니다.
severity 명명 규칙을 적용하는 데 사용되는 심각도를 설정합니다. 연결된 값을 사용 가능한 심각도 수준중 하나로 설정합니다.1

참고:

  1. 명명 규칙 내의 심각도 사양은 Visual Studio와 같은 개발 IDE 내에서만 적용됩니다. 이 설정은 C# 또는 VB 컴파일러에서 인식되지 않으므로 빌드하는 동안에는 적용되지 않습니다. 빌드에 명명 스타일 규칙을 적용하려면 코드 규칙 심각도 구성을 사용하여 심각도를 설정해야 합니다. 자세한 내용은 GitHub 이슈를 참조하세요.

규칙 순서

EditorConfig 파일 내에서 명명 규칙이 정의되는 순서는 중요하지 않습니다. 명명 규칙은 규칙 자체의 정의에 따라 자동으로 정렬됩니다. 접근성, 한정자 및 기호에 대한 보다 구체적인 규칙이 덜 구체적인 규칙보다 우선합니다. 규칙 간에 겹치거나 규칙 순서가 문제를 일으키는 경우 두 규칙의 교집합을 파생된 광범위한 규칙보다 우선하는 새 규칙으로 나눌 수 있습니다. 예를 들어 예제: 겹치는 명명 전략예제: const 한정자 포함 staticreadonly.

EditorConfig 언어 서비스 확장은 EditorConfig 파일을 분석하고, 파일의 규칙 순서가 런타임에 컴파일러에서 사용할 순서와 다른 경우를 보고할 수 있습니다.

참고 항목

Visual Studio 2019 이전 버전의 Visual Studio를 사용하는 경우 이름 지정 규칙은 EditorConfig 파일에서 가장 특정한 버전에서 최소로 정렬되어야 합니다. 적용할 수 있는 첫 번째 규칙은 적용되는 유일한 규칙이 됩니다. 그러나 동일한 이름의 규칙 ‘속성’이 여러 개 있는 경우 가장 최근에 발견된 해당 이름의 속성이 우선 적용됩니다. 자세한 내용은 파일 계층 구조 및 우선 순위를 참조하세요.

예: 겹치는 명명 전략

다음 두 가지 명명 규칙을 고려합니다.

  1. 공용 메서드는 PascalCase입니다.
  2. 비동기 메서드는 .로 "Async"끝납니다.

메서드의 경우 public async 어떤 규칙이 우선적으로 적용되는지는 분명하지 않습니다. 메서드에 대한 public async 새 규칙을 만들고 명명을 정확하게 지정할 수 있습니다.

예: const 한정자 포함 staticreadonly

다음 두 가지 명명 규칙을 고려합니다.

  1. 상수 필드는 PascalCase입니다.
  2. 공용 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 파일 조각은 프라이빗 인스턴스 필드가 _/>로 시작되도록 적용합니다. 해당 규칙을 따르지 않으면 IDE는 이를 컴파일러 오류로 처리합니다. 프라이빗 정적 필드는 무시됩니다.

기호 그룹이 없는 식별자(예 staticreadonly: 인스턴스 필드가 없 static으므로)가 아닌 식별자에 따라 기호 그룹을 정의할 수 있으므로 다음 두 가지 명명 규칙을 정의해야 합니다.

  1. 모든 프라이빗 필드에 static 는 컴파일러error로 명명 스타일이 적용되어야 합니다underscored.
  2. 프라이빗 필드에 staticunderscored 심각도 수준으로 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 사용됩니다.

참고 항목