프로그래밍/C#

Property (프로퍼티)

selinatsu 2024. 9. 18. 17:19
반응형

변수는 아니지만 변수처럼 다뤄지는 Property.

그래서 처음 이 문법을 보면 무척 헤깔린다.

그리고 변수를 public 으로 선언하면 무용지물이 되기 때문에 굳이 이걸 써야하나 라는 생각도 든다.

 

그래도 알고나면 코드의 양을 줄일 수 있고, class 의 기본 컨셉인 데이타의 은닉성을 지키고 있다는 스스로의 만족감같은 걸 느낄 수 있다. ㅎㅎ 

 

외부에 노출시키고 싶지 않은 데이타가 있다고 가정해보자. 

예) 여자 친구의 몸무게. 

 

 

Property 를 사용하지 않았을 경우에는 

public class GirlFriendA
{
    private int mWeight;

    public int GetWeight ()
    {
        return m Weight ;
    }

    public void SetWeight (int val)
    {
        mWeight = val;
    }
}

 

사실 이렇게 외부로 부터 보호해야 할 변수가 달랑 하나 있다면 코드를 짜는게 그렇게 귀찮지는 않다. 

그런데 만약 여자 친구의 개인 신상을 보호해야 할 데이타들이 점점 많아진다면 슬슬 복붙도 귀찮아질 것이다. 

 

 

데이타를 private 로 선언해서 외부로 부터 보호하고 get, set 을 통해 접근할 수 있는 Property 를 활용하면 다음과 같다.

 

 

Property 사용

public class GirlFriendB
{
    private int mWeight ;

    public int Weight
    {
        get { return mWeight; }
        set { m Weight = value; }
    }
}

 

코드의 양이 확 (?) 줄지는 않았다. 그냥 줄어든 느낌을 준다. ㅋㅋ 

통상 변수는 소문자 (w) 로 시작하지만 Property 의 이름은 대문자 (W) 로 시작한다. 이걸로 이것이 변수인지 Property 인지 구분할 수 있게 된다. 또한 set 에 value 값을 대입했는데 이것은 내부 예약어니까 그냥 외우자.

그래도 뭔가 아직 깔끔해보이지는 않는다.

 

 

자동 구현 Property

public class GirlFriendC
{
    public int Weight { get; set; }
}

 

또는 

public class GirlFriendC
{
    public int Weight { get; private set; } = 34;
}

 

프로퍼티 구현시, 다음과 같은 코드는 생략할 수 있음.

1. Field 이름

2. get 접근자의 반환문 : {  return Field;  }

3. set 접근자의 Filed 대입 : { Filed = value; } 

 

변수는 생략되었고, 아래 버전은 set 을 private 로 선언해서 외부에서 값을 설정하지 못하도록 했으며, 선언과 동시에 = 연산자로 값을 설정했다. 이것을 자동 Property 라고 하는데 이 정도되니까 좀 쓸만해보인다.

 

 

GirlFriendC girlFriendC = new GirlFriendC();
Debug.Log( " Weight : " + girlFriendC. Weight );

 

 

Property 는 '함수 기능을 가진 변수처럼 취급되는 메서드' 정도로 이해하면 되겠다.

 

 

도움이 될 만한 영상들

https://www.youtube.com/watch?v=QXakJJHkz8k

 

 

https://www.youtube.com/watch?v=vWCDXgpaU2w

 

https://www.youtube.com/watch?v=omLAXfibAwg

 

 

 

 

 

반응형

'프로그래밍 > C#' 카테고리의 다른 글

yield return  (0) 2024.10.04
배열 초기화  (0) 2024.10.04
for 와 foreach 비교  (1) 2024.10.03
배열[], ArrayList, List<T> 의 각 기능과 차이점  (2) 2024.10.03
int 와 Int32  (0) 2024.10.02