public class PropertyTest : MonoBehaviour
{
private int age;
public int GetAge() { return age; }
public void SetAge(int num) { this.age = num; }
}
private으로 설정되어있는 변수 age를 다른 스크립트에서 접근하기 위해서는
값을 가져오는 GetAge 함수, 값을 넘겨주어 대입시키는(설정해주는) SetAge 함수를 만들어야 했다.
public class PropertyExample : MonoBehaviour
{
public PropertyTest test;
private void Start()
{
int age = test.GetAge(); //새로운 int형 변수 age에 test의 age 가져오기
print($"{age}");
test.SetAge(18); //age를 18으로 설정하기
}
}
다른 스크립트에서 GetAge 와 SetAge 를 활용하는 방법은 위와 같다.
하지만 위처럼 함수들을 만들어 복잡하게 사용할 필요 없이 C#의 기능인 get set 프로퍼티를 사용하면 편하다.
public class PropertyTest : MonoBehaviour
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}
위에서 만들었던 GetAge 와 SetAge 함수를 get set 프로퍼티로 만들었다.
프로퍼티는 public 변수로 선언한다. 보통 private 변수의 이름이 소문자라면 public변수는 앞글자를 대문자로 정의하는게 일반적이다.
public class PropertyExample : MonoBehaviour
{
public PropertyTest test;
private void Start()
{
int age = test.Age; //get
test.Age = 18; //set
}
}
다른 스크립트에서 사용할 때는 private 변수(age) 대신 public 프로퍼티(Age)를 사용한다.
public class PropertyTest : MonoBehaviour
{
private int age;
public int Age
{
get { return age; }
set
{
age = value;
PlusAge(value);
if (value < 1)
{
//...
}
else if (value > 10)
{
//...
}
}
}
void PlusAge(int age)
{
age++;
}
}
set에서 단순히 값을 초기화 해주는 것만이 아닌, 들어온 value값을 다시 특정 메소드에 매개변수로 넘겨줄 수도 있고
if문을 이용하여 value의 값에 따라 특정 행동을 하게 할 수도 있다.
[축약형 프로퍼티]
public int Age
{
get;
set;
}
//이것 외에 중괄호를 생략하고 => 를 활용하는 방법 등 축약할 수 있는 방법은 다양하다.
[자신 클래스 내에서만 set 할 수 있게 하는 private set 프로퍼티]
public int Age
{
get;
private set;
}
[읽기 전용 프로퍼티]
public int Age
{
get;
}
private void Start()
{
Age = 10; //프로퍼티에 get만 써놓으면 읽기 전용 프로퍼티가 된다.
//이 상태에서는 값을 설정할 수가 없다.
//초기값 설정은 get => 5 이런식으로 하면 된다.
}
'C# 기초' 카테고리의 다른 글
[C#] Collections (0) | 2023.10.24 |
---|---|
[C#] ref, in, out 참조에 의한 호출 (0) | 2023.10.23 |
[C#] 값 형식과 참조 형식 (1) | 2023.10.23 |
[C#] 일반화 프로그래밍 (제네릭/Generic) (1) | 2023.10.20 |
[C#] 모노 싱글톤 (0) | 2023.10.19 |