굳이 private가 있는데 프로퍼티를 쓸 필요성이 있냐 이거다.
심지어 유니티에선 [SerializeField]를 통해 인스팩터 창에서 private 변수에 값을 넣어줄 수 있도록 할 수 있다.
그런데도 왜 써야하는가...?
어찌보면 당연한 것인데 private로 선언한 변수는 다른 클래스에선 참조를 할 수가 없다.
그렇기 때문에 c++에선 get과 set을 통해 참조하고 값을 변경할 수 있도록 한것인데 C#에선 이것이 프로퍼티를 통해 쉽게 가능해진다.
//c++
private int num;
int GetNum()
{
return num;
}
void SetNum(int num)
{
this.num = num;
}
//c# 프로퍼티
public int Num { get; set; }
코드가 깔끔해지는 것을 볼 수가 있다.
public Transform Player { get; private set; }
만일 외부에서 읽기는 가능하지만 값에 대한 변경을 원하지 않을 때는 위에처럼 set에다가 private를 걸어줄 수 있다.
또한 만일 해당 다른 변수의 값을 가져오는 경우엔 => 연산자를 통해 간단하게 표현할 수 있다.
get을 통해 다른 변수 값을 가져온다면 해당 방법을 이용해볼 수 있다.
이런식으로 private로 선언된 변수도 참조하여 값을 가져올 수 있다.
매번 statHandler.CurrentStat.maxHealth를 쓴다면 코드가 길어지기 때문에 MaxHealth라는 프로퍼티 변수를 두면 편리하게 이용할 수가 있을 것이다.
참고로 public 말고 protected도 가능하다.
protected Transform ClosestTarget { get; private set; }
protected로 선언한 모습
정리
외부에서 읽고 쓰는 일이 없으면 private로 선언
외부에서 값을 읽고 쓰게 싶으면서도 보안을 높이고 싶으면 프로퍼티로 선언
외부서 읽기는 하되 값의 변경을 원하지 않는다면 private set으로 프로퍼티를 선언한다.
외부서 읽기는 하되 값의 변경을 원하지 않고 다른 변수의 값을 get하는 경우엔 => 연산자의 사용을 고려해볼 수도 있다.
보안 신경쓰지 않고 외부에서 읽고 쓰게 하고 싶다면 public으로 선언하면 된다.