❓Getter Setter
Getter은 읽을때, Setter은 값을 저장할때 사용한다.
hp이라는 변수를 선언했을때, hp의 값을 set(저장)한다.
hp에 저장된 값을 불러오는 것이 get이다.public Test test; void Start() { int hp = test.hp; //get으로 읽을때 test.Hp = 100; //set으로 값을 저장할때 }
❓Get Set을 사용하는 이유
정보 은닉을 위해서 사용
밖에서 함부로 접근하지 못하도록 사용한다.
private, protected로 선언하면 외부에서 접근할 수 없기 때문에 이럴때 get set으로 접근할 수 있다.
💡선언 방법
방법 1.
공개범위 자료형 변수명;
(반대)공개범위 자료형 (대문자) 변수명)
{ get {return 변수명; } }
{ set {변수명 = value ; } }public class Character { private float hp; //필드 public float HP //프로퍼티 얘는 무조건 대문자 { // 이 안에는 소문자 get { return hp;} set { hp= value; } } }
방법 2.
공개범위 자료형 (대문자) 변수명 { get; set; }public class Character { public float HP { get; set;} }
💡 주의사항
set을 private으로 설정했을때
public class Character
{
public float HP
{ get; private set;}
}
void Start()
{
print(HP);
}
}
자기 클래스 내에서만 불러올 수 있다.
get만 썼을 경우
public class Character
{
public float HP { get;} = 5
}
void Start()
{
~~Hp= 5;~~ //대입X
print(HP);
}
}
참고 : 링크
get set을 외부에서 접근하기 위해서 오른쪽처럼 charles.HP = 100;
이라고 해주면 set이 호출된다.
100이라는 값을 할당해주기 때문에 set이 호출되는 것.
using TMPro;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private float score;
public float Score
{
get
{
return score;
}
}
private void Awake()
{
Instance = this;
}
}
using UnityEngine;
using UnityEngine.SceneManagement;
public class Player : MonoBehaviour
{
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Wall")
{
int score = (int)GameManager.Instance.Score;
PlayerPrefs.SetInt("Score", score); //키 벨류 저장장소
SceneManager.LoadScene("GameOverScene");
}
}
}
GameManager에서 만든 score를 Player 스크립트에서 저장한다.