변수는 아니지만 변수처럼 다뤄지는 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 |