어떤 변수를 수정하는 것은 아무나 할 수 없고 읽는 것은 어디에서나 가능해야 한다고 가정해보자.
public class A : MonoBehaviour
{
// jeju라는 변수를 다른 곳에서 읽을 수는 있지만 수정할 수 없게 하려면
private string Jeju;
// 수정하는 함수
private void SetJeju(string value)
{
Jeju = value;
}
// 읽는 함수
public string GetJeju()
{
return Jeju;
}
}
이렇게 두 개의 함수를 만들어줘야 한다.
이런 변수가 하나 있을 때는 함수를 이렇게 만들어주면 되지만 여러 개라면 그때마다 2개씩 함수를 만들어줘야 되서 굉장히 비효율적이다.
그럴 때 프로퍼티라는 것을 쓰게 된다.
프로퍼티 속성
public class A : MonoBehaviour
{
private string Jeju;
// 프로퍼티 만들기 : 괄호 안에 get과 set을 만들어준다. value는 그대로 써야 된다.
public string JejuP { get { return Jeju; } private set { Jeju = value; }}
}
이런 식으로 프로퍼티를 만들어서 함수를 하나로 쉽게 만들 수 있다.
거기다 접근 지정자를 써서 은닉성 보장까지 쉽게 할 수 있다.
public class A : MonoBehaviour
{
private string Jeju;
private string Nomad;
// return을 단순 변수가 아닌 계산도 가능하고 조건문도 넣을 수 있다.
public string JejuP { get { return Jeju + Nomad; } private set { if (value == "제주") Jeju = "제주도"; else Jeju = value;}}
}
이렇게 프로퍼티에 조건문을 넣을 수도 있다.
더 쉽게 프로퍼티를 쓰는 법도 있다.
public string Nomad { get; set; }
// 이렇게 하면 겟과 셋을 넣어줄 수 있고 변수처럼 쓸 수도 있다.
Nomad = "노마드";
print(Nomad);
인덱서
프로퍼티와 역할은 같은데 쓰기 좀 더 편하게 만들어 놓았다.
public class Blog
{
public int[] temp = new int[5];
// this는 현재 클래스를 가르키는 예약어다.
public int this[int index]
{
get { return temp[index]; }
set { temp[index] = value; }
}
}
// 인덱서가 없을 때 temp 배열을 가지고 오려면 클래스에서 프로퍼티를 불러와야 된다.
Blog.temp[3] = 1;
// 인덱서가 있다면 바로 부를 수 있다.
temp[3] = 1;
프로퍼티이기 때문에 인덱서의 get과 set에도 조건문 등을 적용할 수 있다.
※ 함께 읽으면 좋은 C# 기초
C# 컬렉션 리스트, 큐, 스택, 해시테이블, 딕셔너리, arraylist 클릭!
'IT > 코딩' 카테고리의 다른 글
C# 무명 메소드, 람다식, Action, Func, 예외 처리 (0) | 2021.12.18 |
---|---|
C# 인터페이스, 형식 매개 변수 T (0) | 2021.12.17 |
C# 클래스 상속 (0) | 2021.12.15 |
C# 구조체 델리게이트 (0) | 2021.12.14 |
C# 네임스페이스 Namespace (0) | 2021.12.13 |