CommunityToolkit.Mvvm 필드를 선언할 때 [언더바]?

여러분은 CommunityToolkit.Mvvm에서 필드를 사용할 때 [언더바]를 붙이시나요?

[OpservableProperty]
private string _name;

// or

[OpservableProperty]
private string name;

그리고 CommunityToolkit GitHub Discussions에서도 동일하게 질문해봤습니다!

저는 [언더바]를 붙여오고 있는데요. 다양한 소스들을 참고하다 보면 이와 반대인 경우도 자주 보게 된 것 같습니다.
그래서 여러분들의 생각이나 이유에 대해서도 얘기해보면 재밌을 것 같습니다. :smile:

7개의 좋아요

저의 경우에는 Toolkit을 사용하지는 않지만 필드를 선언 할 때는 언더바를 사용하고 있습니다.
동일한 질문에도 판다님이 댓글을 달아주셨지만 C#을 처음 공부할 때 코딩 스탠다드를 보고 공부해서 그렇기도 하고
멤버변수와 구분 되는 점이 가독성이 높아 좋은 것 같습니다.

5개의 좋아요

저는 원래 언더바를 안썼다가 필드 초기화 시 this.field = field로 써야 하는 것을 가끔 field = field로 초기화 해버려서 몇 번 버그 만들고 난 후로는 _field = field로 언더바를 넣는것으로 스타일을 바꾸었습니다.

6개의 좋아요

@Bantree @dimohy 소중한 의견 감사합니다!! :smile:

그리고 [ObservableProperty] 어트리뷰트의 특수성 때문에 문법을 달리 한 사례도 있다면 궁금하네요.

2개의 좋아요

일반적인 명명 규칙대로 언더바를 붙여 써오긴 했지만 이런 효과는 생각도 못했네요:laughing:

3개의 좋아요

저도 헷갈려서 언더바를 붙입니다~

2개의 좋아요

image

언더바를 사용하고 있습니다.

1개의 좋아요

개인적으로 아래와 같이 프로퍼티/필드 모두 대문자로 시작하되 필드는 _를 붙이는 방식으로 작성합니다.
지극히 개인적인 스타일인 점 알아주시면 감사하겠습니다.
image
이런 방식으로 작성하게 되면 몇가지 장점들이 있는데

  1. 프로퍼티&필드의 명칭을 동시에 변경하고자 할 때 손쉽게 변경할 수 있습니다.
    image
    예시로 “MyProperty” 로 되어있는 프로퍼티/필드 명을 "Title"로 변경하고자 할 때
    저렇게 텍스트검색/대체 기능(Ctrl+F)으로 한꺼번에 변경하실 수 있고
    당연한 이야기지만 프로퍼티와 필드가 언더바로 구분되어 있기 때문에 충돌나지 않습니다.

  2. 커스텀 Snippet을 적용하여 생산성을 높일 수 있습니다.
    기존의 propfull 이라는 MS에서 제공하는 Snippet이 있기는 하나 타입에 대해서만 공통으로 변경되고,
    프로퍼티명과 필드명은 별도로 작성해 줘야하는 번거로움이 있습니다.
    그러한 번거로움이 싫어 개인적으로 만든 Snippet 입니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    	<CodeSnippet Format="1.0.0">
    		<Header>
    			<Title>propmvvm</Title>
    			<Shortcut>propmvvm</Shortcut>
    			<Description>Code snippet for property and backing field with mvvm pattern</Description>
    			<Author>BOBx5</Author>
    			<SnippetTypes>
    				<SnippetType>Expansion</SnippetType>
    			</SnippetTypes>
    		</Header>
    		<Snippet>
    			<Declarations>
    				<Literal>
    					<ID>type</ID>
    					<ToolTip>Property type</ToolTip>
    					<Default>int</Default>
    				</Literal>
    				<Literal>
    					<ID>property</ID>
    					<ToolTip>Property name</ToolTip>
    					<Default>MyProperty</Default>
    				</Literal>
    			</Declarations>
    			<Code Language="csharp"><![CDATA[public $type$ $property$
    	{
    		get => _$property$;
    		set => SetProperty(ref _$property$, value);
    	}
    	private $type$ _$property$;]]>
    			</Code>
    		</Snippet>
    	</CodeSnippet>
    </CodeSnippets>
    

    아래 경로에 파일 생성해서 넣으시면 됩니다.
    C:\Users\{PC유저명}\Documents\Visual Studio 2022\Code Snippets\Visual C#\My Code Snippets\propmvvm.snippet
    경로에 추가하셨다면 C#으로 코드 작성시 ‘propmvvm’+[Tab][Tab] 하시면 자동 완성되고,
    타입 및 프로퍼티 명이 동시에 변경되실겁니다. 개인적으로 추가하신 Snippet중 겹치는 것이 없으시다면
    ‘propmv’ 까지만 입력하셔도 잘 작동됩니다.

  3. MS의 기존 코드 컨벤션에서는 필드를 먼저 선언하고 프로퍼티를 선언하도록 되어있는데
    보시다시피 저는 프로퍼티→필드 순으로 되어있는데, 다른 이유는 아니고
    image
    사진의 아랫부분을 보시면 아시겠지만 VS에서 CodeLens를 사용 중이시라면
    참조 갯수를 표시하는 부분 때문에 프로퍼티랑 필드간에 애매하게 떨어져서 표시되어
    예쁘게 뭉치지 않는 느낌입니다. 그래서 위쪽 같은 방식을 선호합니다 ㅎㅎ

지극히 개인적인 스타일이라 코드컨벤션으로 따지고 들어가면
제가 하는 스타일이 구리다고 하실 분도 있을거 같아서
‘아~ 이렇게 쓰는 사람도 있구나~’ 하고 넘어가 주셨으면 좋겠습니다 ㅠㅠ

6개의 좋아요

저는 없습니다. 문서에 의하면

lowerCamel, _lowerCamel, m_lowerCamel 이렇게 세가지 형태를 모두 인식하는 것으로 보입니다. 심지어 private이 아니어도 상관이 없다고 합니다. (하지만 정신 건강상 private이 좋겠지요)

2개의 좋아요