Mir의 운영환경 | |
---|---|
본체 | DeskTop |
O S | Windows XP Professional Ver 2002 Service Pack 2 |
Application | VisualStudio2008 (Ver.9.0.21022.8) |
.Net | Framework Ver 3.5 |
신규 추가된 기능 Auto-Implemented Properties를 배워보자.
(참조 : https://msdn.microsoft.com/ko-kr/library/bb384054.aspx)
Property를 많이 사용하시는분들도 있지만 매번 get; set;을 적어넣기가 솔직히 조금 귀찮습니다.
필자 또한 상속되거나 특정 중요 Data관리때만 혹은 특정 기능을 넣을때만 Property를 사용했었습니다.
private string _Name;
public string name
{
get { return _Name; }
set { _Name = value; }
}
이런식으로 한두개야 뭐 그냥 적어넣겠지만 수십개가 되는 변수의 Property를 적어넣을때는 정말 귀찮습니다.
(습관화 한다고 최대한 적어넣지만 가끔은 그냥 Public으로 끝내버릴때도 많습니다 ㅠ)
3.0부터는 이러한 기본 Property를 자동으로 구현해주는 기능이 생겼습니다.
Auto-Implemented Properties(자동 구현 프로퍼티)라고 불리더군요.
구현방법은 아래와 같습니다.
public string name { get; set; }
public string id { get; internal set; }
public string pwd { private get; set; }
보통 인터페이스에서 Property를 선언할때 이와 비슷하게 get; set;을 혹은 둘중 하나만 남겨두는걸 보셨을겁니다.
하지만 이 코드는 인터페이스가 아닌 클래스내에서 변수와 Property를 한번에 선언하는 코드입니다.
(저도 처음 봤을때 어리둥절했습니다. 인터페이스가 아닌 클래스에서 이런 선언문이 있어서)
'변수는 선언하지도 않았는데 Property가 어떻게 생기지?' 라는 생각이 들수도 있지만 저 코드(Auto-Implemented Properties)가 있으면 컴파일러가 컴파일 할때 자동으로 대입되는 변수를 생성해주는것입니다.
물론 사용하기에는 몇가지 제약사항과 규칙이 있습니다.
1. get; set;을 두개 모두넣어야 한다.
수정 -> Visual Studio 2015버전부터는 하나만 넣어도 됩니다.
(참조 : https://msdn.microsoft.com/ko-kr/library/bb383979.aspx)
2. get; set; 개별로 Access Modifier(엑세스 제한자)를 넣을수 있으며 기본적으로 Property 선언문의 Access Modifier를 상속한다.
3. Property선언문의 Access Modifier(엑세스 제한자)보다 개방적인 Access Modifier를 넣을수 없다.
(즉 private string name { public get; set; } 이런식으로는 불가능하며 public string name { get; private set; } 이런식으로 구현해야합니다.)
4. get; set;내부에 로직을 넣을수 없다. (로직을 넣을려면 기존에 사용하던대로 변수를 선언하고 난뒤 Property를 선언해서 사용해야합니다.)
대충 이정도의 제약사항과 규칙이 있습니다.
뭐 별거 아닌 기능이네 싶지만 그래도 코드 한줄이라도 줄이고 싶으신분들에게는 아마 환영받을 기능이 아닐까 싶습니다.
(다른분들 블로그를 보면 2007년에 올라와있던데.. 전 2015년되서야 알았네요 ㅠㅠ)
(그리고 10년뒤인 25년에 블로그 정리를 다시하는중인.... ㄷㄷㄷㄷ 심지어 이글은 비공개로 해놓고 까먹고 있었..)
'C# > LINQ' 카테고리의 다른 글
[C#/.Net][Framework 3.0 신규 기능(2)] Extension Methods (0) | 2015.11.09 |
---|---|
[C#/.Net][Framework 3.0 신규 기능(0)] Implicitly Typed Local Variables (0) | 2015.11.04 |