Microsoft MVP성태의 닷넷 이야기
공통 코딩 규약 : 2. 프로퍼티와 공용 필드에 대한 선택 [링크 복사], [링크+제목 복사]
조회: 5603
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Properties vs public fields redux... 
; http://blogs.msdn.com/ericgu/archive/2007/02/01/properties-vs-public-fields-redux.aspx

위의 글은 "단순" 공용 필드를 만들 것인지, private 필드/공용 프로퍼티로 만들 것인지에 대한 기준을 말하고 있습니다. 예를 들어 이런 상황이죠.

[코드 1: 공용 필드로 만든 경우]
public class Test
{
  public string Name;
}

[코드 2: 공용 프로퍼티로 만든 경우]
public class Test
{
  private string name;
  public string Name
  {
    get { return this.name; }
    set { this.name = value; }
  }
}

이런 경우 많으시죠? ^^ 저 역시 매번 고민이 되곤 하는데요.

말인즉슨, 공용 프로퍼티를 버전화에 대한 수단으로 바라봐야 한다는 것입니다. 그말을 듣고 보니 또 그런 것 같지요?^^

C++ 클래스와 비교해 보면, public 멤버 변수를 두기 보다는 반드시(?) public 멤버 함수를 통해서 멤버 변수를 노출하게 되는 것과 비슷한 경우라고 볼 수도 있겠습니다.

이 글을 쓴 "Eric Gunnerson"은 한가지 예외 사항을 허락하고 있는데요. 버전화가 필요하지 않은 경우, - 그 예로 순수하게 내부에서만 연결 고리를 맺고 있는 클래스라면 굳이 공용 프로퍼티를 둘 필요가 없다는 것.

또 이렇게 말하면 헷갈릴 것 같으니까... 그냥 아예 이렇게 기준을 정하는 것이 어떨까요?

internal 클래스의 공용 필드는 허용하되, public 클래스의 공용 필드는 허용하지 말자!

이거 쓰고 보니 떠오르는 것이 있는데,,, 이 글을 읽으실 분들께 한가지 의견을 구하고 싶은 것이 있습니다.

위의 "[코드 2]" 와 같이 이름을 만드는 경우에는 private 과 public 의 차이로 인해 CLS-compliant 스펙을 만족합니다. 그런데 만약 private 프로퍼티를 protected 로 승격을 시키게 되는 경우가 발생하면 그 스펙을 만족하지 못하게 되는데요. 혹시 이렇게 내부 필드와 외부 공용 프로퍼티에 대한 적당한 이름 규칙을 만들어 쓰신 분이 계시면 ^^ 소개 좀 부탁드리겠습니다.

저는 아직까지도 이 문제로 고민하고 있습니다. ^^;



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 2/3/2007]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

비밀번호

댓글 작성자
 



2007-05-21 09시55분
[이방은] 음 저의 경우는..
모든 경우에 있어서..
프라퍼티를 씁니다..ㅋㅋ
물론 코드량이 약간 많아집니다만..이렇게 획일적으로 통일 시켜 버리는게..편하더군요..ㅡ.ㅡ;
필드는 절대적으로 private 허용하게끔 쓴답니다..ㅡ.ㅡ;
internal이나 protected도 모두 프라퍼티로...켁..병일까요..@.@
[guest]

1  2  3  4  5  6  [7]  8 
NoWriterDateCnt.TitleFile(s)
43정성태7/17/20035761탐색기 Namespace Extension 컨테이너 (VC 6.0, ATL) 2002.03.24파일 다운로드1
42정성태7/17/20034286KBManager WebBand (VC 6.0, ATL/Script) 2001.10.01파일 다운로드1
41정성태7/17/20034358UrlMonDownload (VC 6.0, ATL) 2001.06.16파일 다운로드1
40정성태7/17/20034305IE 북마크 임포트 (VC 6.0, ATL, MFC 지원) 2001.01.20파일 다운로드1
39정성태7/17/20034876MsIE.exe (VC 6.0, ATL, HTML Parser 로서의 IHTMLDocument2 이용 및 IE 보안설정) 2000.11.23파일 다운로드1
38정성태7/17/20034590EnumIE.exe (VC 6.0, ATL, 현재 사용 중인 IE에 접속) 2000.10.24파일 다운로드1
37정성태7/17/20034330ReuseIE.exe (VC ++ 6,0, Internet Explorer 재사용) 2000.04.17파일 다운로드1
36정성태7/17/20033933RemoteViewer dll (VC ++ 6.0, ATL) 2000.03.13파일 다운로드1
35정성태7/17/20034236IESpy dll (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
34정성태7/17/20033972Bmp2Gif 콘트롤 (VC ++ 6.0, MFC) 2000.02.28파일 다운로드1
33정성태7/17/20033788Gif89a 콘트롤 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
32정성태7/17/20034295이미지 4버튼 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
31정성태7/17/20033917이미지 홀더 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
30정성태7/17/20034045이미지 뷰어 (VC ++ 6.0, ATL) 2000.02.28파일 다운로드1
29정성태7/17/20033826ChatClient (VC ++ 6.0, MFC) 1999.09.09파일 다운로드1
28정성태7/17/20035223Winsock2 SPI : LSP 예제 (VC ++ 6.0) 2001.08.07파일 다운로드1
27정성태7/17/20034332Echo Services Server (VC ++ 6.0, ATL Service) 2001.01.07파일 다운로드1
26정성태7/17/20037357FTP Client (VC ++ 6.0, MFC) 1999.09.14파일 다운로드1
25정성태7/17/20033727모뎀 정보를 알아내는 클래스 (VC ++ 6.0, MFC) 1999.09.12파일 다운로드1
24정성태7/17/20038454Ping (VC ++ 6.0, MFC, CSocket Class) 1999.09.09 [1]파일 다운로드1
23정성태7/21/20037417ChatServer / ChatClient (VC ++ 6.0, MFC, Win32 API Socket) 1999.08.01파일 다운로드2
22정성태7/17/20033886성능 객체 카운터 (VC 6.0, Win32) 2001.07.07파일 다운로드1
21정성태7/17/20033911StringSplit 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
20정성태7/17/20034179SQLDirect 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
19정성태7/17/20033581ImeControl 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
18정성태7/17/20034011RegistryEx 클래스 (VC++6.0, Win32) 2000.02.28파일 다운로드1
1  2  3  4  5  6  [7]  8