'Salary', 'Program' 스크립트 2개 미리 생성
<Salary 스크립트>
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class Salary : MonoBehaviour
{
// private는 은닉성을 보장한다. 하지만 민감한 변수가 많으면 많을수록 민감한 변수당 x2개의 함수가 필요함(get, set). 이럴 때 필요한 것이 프로퍼티!
private int salary;
// private int bonus = 10;
// 예시1.
// public int SalaryP { get { return salary ;/*읽기(꺼내오는 것)*/ } /*private set { salary = value; }*/ }/*쓰기. salary 값에다가 넣어줌. 미리 예약된 value(누군가가 만들어 놓은 변수) 반드시 value라는 이름으로 정의해줘야 됨 */
// 예시2.
// public int SalaryP { get { return salary + bonus/* 보너스를 추가한 월급이 계산되어 나옴 */; } set { if (value < 0) salary = 10; else salary = value; } } // set 부분해석 => 만약 월급이 잘못 입력되면(월급이 마이너스가 될 순 없으므로) 10을 입력하도록. 그게 아니라면 기입한 월급을 그대로 반영
// 예시3. 자동완성 프로퍼티
public int SalaryP { get { return salary; } set { if (value < 0) salary = 10; else salary = value; } }
public int Bonus { get; set; } // 보다시피 프로퍼티 자체가 변수역할도 함
// public int SalaryP는 public 이므로 타 클래스에서도 사용 가능.
// set 앞에 private가 붙으면 타 클래스에서 사용 못함.
// set 부분을 아예 지우는 것도 방법이 될 수 있다. 그렇게 되면 동일한 클래스에서 쓰지 못하는데 그럴 땐 밑에 Start를 보다시피 부분에 변수를 선언하고 값을 대입한다.
//private void SetSalary(int value)
//{
// salary = value;
//}
//public int GetSalary()
//{
// return salary; // 타 클래스에서 salary를 수정할 수는 없지만 읽어들일 수는 있다.
//}
void Start()
{
// salary = 10;
// SalaryP = 10; // value 변수에 10이 대입. 그러면 private int salary 의 값은 10이 됨
// print(SalaryP); // 꺼내올 때
Bonus = 10;
print(Bonus);
// 프로퍼티의 대표적인 예시가 배열의 크기를 나타내는 .length다.
// int[] a;
// a.Length; // length는 프로퍼티로 만들어져 있다. (스패너 모양은 프로퍼티)
}
}
<Program 스크립트>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Program : MonoBehaviour
{
Salary mySalary = new Salary();
void Start() // 자신의 연봉을 검색
{
//print(mySalary.GetSalary());
//mySalary.SetSalary(55);
// mySalary.SalaryP = 50; // 값을 넣어줄 수도 있고
print(mySalary.SalaryP); // 출력할 수도 있다... 그럼 은닉성의 의미가 없는데? => 은닉성을 위해 Salary의 set 부분에 private를 적어준다.
}
}
댓글