글쓴 사람
정성태 (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 로 승격을 시키게 되는 경우가 발생하면 그 스펙을 만족하지 못하게 되는데요. 혹시 이렇게 내부 필드와 외부 공용 프로퍼티에 대한 적당한 이름 규칙을 만들어 쓰신 분이 계시면 ^^ 소개 좀 부탁드리겠습니다.
저는 아직까지도 이 문제로 고민하고 있습니다. ^^;
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]
[연관 글]
1 2 3 4 5 [6] 7 8
No | Writer | Date | Cnt. | Title | File(s) |
69 | 정성태 | 10/27/2006 | 4542 | .NET : 1. Typed DataSet 에서의 ExcludeSchema 사용 | |
68 | 정성태 | 1/27/2007 | 5040 | Vista : 2. Elevate through ShellExecute | |
67 | 정성태 | 10/22/2006 | 4229 | Vista : 1. Programmatically determine if an application requires elevation | |
66 | 정성태 | 9/22/2006 | 4148 | Tip/Trick: UpdateProgress Control and AJAX Activity Image Animations | |
65 | 정성태 | 9/15/2006 | 9431 | Tip/Trick: Enabling Back/Forward-Button Support for ASP.NET AJAX UpdatePanel | |
64 | 정성태 | 2/23/2007 | 4360 | Why are NameValueCollection lookups slower than Hashtable? [Kim Hamilton] | |
63 | 정성태 | 8/30/2006 | 4247 | WinFormResizer for .NET 2.0, v.2.0.0020.3 Released! | |
62 | 정성태 | 8/21/2006 | 4054 | Stylistic differences in using | |
61 | 정성태 | 8/5/2006 | 4242 | Detecting Information Card Support (CardSpace!) in a browser | |
60 | 정성태 | 7/22/2006 | 4011 | JonGallant WebControls v1.0 - ScrollableContainer | |
59 | 정성태 | 3/2/2006 | 5306 | .NET이 왜 성공할 수밖에 없는가? | |
58 | 정성태 | 10/5/2005 | 5102 | 한국 MSDN - 홈지기가 번역한 MSDN Magazine 자료 | |
57 | 정성태 | 5/5/2005 | 4511 | 구구단 프로그램을 제외하고, 벤더종속적이지 않은 프로그래밍 언어가 있나요? | |
53 | 정성태 | 3/4/2005 | 5829 | [마소 연재 기사: 2004-05] 특집 X-Inernet : 닷넷 스마트 클라이언트 [4] | 1 |
52 | 정성태 | 3/4/2005 | 6079 | [마소 연재 기사: 2004-04] 실전!강의실 - IE에서 닷넷 스마트 클라이언트 개발 3 | 1 |
51 | 정성태 | 3/4/2005 | 6410 | [마소 연재 기사: 2004-03] 실전!강의실 - IE에서 닷넷 스마트 클라이언트 개발 2 | 1 |
55 | 정성태 | 3/30/2005 | 4865 | [추가] 기본 보안만으로 구현하는 스마트 클라이언트 이벤트 구현 | |
50 | 정성태 | 3/4/2005 | 8456 | [마소 연재 기사: 2004-02] 실전!강의실 - IE에서 닷넷 스마트 클라이언트 개발 1 [3] | 1 |
49 | 정성태 | 9/7/2006 | 7677 | RSA 공개키/개인키 암호화, DES 암호화, MD5 단방향 해시 암호화 클래스 (C#) 2002.09.25 | 1 |
48 | 정성태 | 7/17/2003 | 5600 | C# 으로 만든 Base64 인코딩/디코딩 클래스 (C#) 2002.09.24 | 1 |
47 | 정성태 | 7/17/2003 | 4545 | C# 으로 만든 DLL 을 Managed C++ 에서 이용하는 예제 (C#, Managed C++) 2002.08.01 | 1 |
46 | 정성태 | 7/17/2003 | 4699 | .NET으로 만든 COM+ 객체를 HTML에서 사용 (C#, COM+) 2002.06.10 | 1 |
45 | 정성태 | 7/17/2003 | 4862 | COM+ 객체 원격 접근예제 (VC 6.0, ATL, COM+) 2002.05.31 | 1 |
44 | 정성태 | 7/17/2003 | 4800 | Win32 API Hook (VC 6.0, ATL) 2002.05.12 | 1 |
54 | 정성태 | 3/21/2005 | 4333 | [추가]: 최근 나온 소개된 관련 기사 | 2 |
43 | 정성태 | 7/17/2003 | 5755 | 탐색기 Namespace Extension 컨테이너 (VC 6.0, ATL) 2002.03.24 | 1 |
1 2 3 4 5 [6] 7 8