C#/LINQ

[C#/.Net][Framework 3.0 신규 기능(1)] Auto-Implemented Properties

Fly_Mir 2015. 11. 4. 11:15
Mir의 운영환경
본체DeskTop
O SWindows XP Professional Ver 2002 Service Pack 2
ApplicationVisualStudio2008 (Ver.9.0.21022.8)
.NetFramework 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년에 블로그 정리를 다시하는중인.... ㄷㄷㄷㄷ 심지어 이글은 비공개로 해놓고 까먹고 있었..)