본문 바로가기

.NET/C#

Property의 get, set 에 대한 간단한 정리

728x90
반응형

제 머리로는 도저히 안되길래 hoons에 도움을 받았습니다.(hoons가 뭐냐고요?? 닷넷 커뮤니티죠 ㅎ
www.hoons.kr 여기로 가시면 들어가실수 있죠)]

우선 property는
1.
    1
 private string name;
    2 public string GetName() { return name; }
    3 public void SetName(string n) { name = n; }
2.

    1 private string name;

    2 public string Name

    3 {

    4        get { return name; }

    5        set { name = value; }

    6 }
3.

    1 public string Email { get; set; }

요렇게 3가지의 방법을 구현을 할 수 있지요 보통은 1번은 거의 안쓰고 2,3번을 쓰게 되는데 3번같은 경우는 닷넷 프레임워크 3.0부터 지원하고 있습니다.

그렇다면 이 둘의 차이는 무엇일까요??
현제로써는 아무런 차이가 없다고 합니다~컴파일시 약간의 차이를 띄긴 하지만 결국, 값을 넣고(set), 빼는(get) 동일한 기능을 한다는 것이지요.

3번의 자동으로 구현된 속성의 경우 컴파일시 익명의 전용 필드가 생성되어 동일한 방법으로 get, set메서드가 구현됩니다. 액세스를 한정하는 방법에도 문법적인 차이가 있다는데요. 그건 책이나 MDSN을 찾아보시면 쉽게 찾을수 있다네요.(전 못찾겠던데 ㅜㅜ) 뭐 암튼 그렇구요

그런데 값을 get할때나 set할때 가공(처리)를 하고 싶다면 어떻게 하면 될까요!?
예를 들어 값을 가져올때(get) html태그를 제거하고 순수 문자열만 가져오고 싶다면? C#3.0의 자동 구현된 속성에서는 문법적으로 방법이 없는거죠.그냥 자동으로 구현을 해주니 일반적인 속성만 나오게되니 불가능 하게 되는거죠 하지만 기존의 명시적인 속성 구현방법으로는 가능이 한것입니다. set도 마찬가지고요. 그리고 여러개의 프로퍼티가 하나의 private필드를 다룰 수도 있습니다.(저는 이건 보지 못했네요 ^^)
private string _content;

public string Content
{
    get
    {
        return Regex.Replace(_content, @"<(.|\n)*?>"string.Empty);
    }
    set { _content = value; }
}

C#3.0이상으로 코드를 작성하면서 값을 get, set하는 속성을 구현한다면 코드를 한줄이라도 더 줄일수 있는 자동구현된 속성을 이용하는게 더 좋다는것이죠. 기호에 맞게 사용하면 된다는 것입니다 ^^

DB에서 반환하는 레코드셋에 대응하는 Entity Class를 만들때 테이블의 컬럼 수 만큼 Property를 만들게 되는데, 그저 값만 담을 건데 무수히 많은 Property get,set 메서드와 그만큼의 private 필드를 만드는건 엄청 귀찮은 작업이죠 그것을 간소화된 구문을 통해 코드량을 감소시켜주는데 의미가 있는겁니다.

결국 get, set은 문법적으로 return 을 해서 값을 빼내고, 그 값을 받아오는 역할을 하는 것입니다. 메소드 자체가 그렇게 구현되어 있어 그렇게 작동이 되는것이지요~

메소드의 구현 모습을 보고 싶다면 MSDN을 보면 찾을수 있을거라 생각하고

그만 마치겠습니다~

감사합니다~~^ㅡ^

출처 : 훈스닷넷 시삽 진수님의 글...

728x90
반응형

'.NET > C#' 카테고리의 다른 글

C# Collection  (0) 2009.12.21
Interface  (0) 2009.12.18
Class(5)  (0) 2009.12.18
형변환에 대해서...  (0) 2009.12.18
System.Object 클래스 상속  (3) 2009.12.18
Class(4)  (0) 2009.12.17
Class(3)  (0) 2009.12.17
Class(2)  (0) 2009.12.16
Class(1)  (0) 2009.12.16
C# enum, struct  (0) 2009.12.16