- 클래스가 구현 또는 코드를 숨기는 동시에 값을 가져오고 설정하는 법을 공개적으로 노출할 수 있다.
using UnityEngine;
using ~~~~~~~~~~~;
public class Player : MonoBehaviour
{
private int hp;
public int PlayerHP
{
get
{
return hp; // 속성 값을 반환
}
set
{
if(value<10)
{
Debug.Log("해독제를 사용했습니다.")
}
else
{
hp = value;
}
}
void Start()
{
PlayerHP = 5; // 해독제를 사용했다는 디버그가 찍히겠죠.
// playerHP = 15; // 플레이어의 체력이 바뀌고 끝나겠죠.
}
}
}
Static이란, 변수 / 함수 / 클래스에 정적(static) 속성을 부여하여 클래스에서 객체를 생성하지 않고 변수나 함수를 호출 기능
굉장히 편해보이는 기능이지만, 남발 해서는 안되는 이유가 있다.
static을 선언하는 즉시(컴파일 타임) 데이터에 저장이 된다.(런타임 이전에 이미 생성)
그리고 어플리케이션을 종료하기 전까지 쭉 가지고 있다.
사용하지 않을 때나 필요하지 않을 때에도 갈비지컬렉터(GC)가 실행되지 않기 때문에 메모리 낭비가 심하다.
따라서 거의 변할 일이 없는 변수나 함수에만 사용하는 것을 권장한다.
편하다고 막 사용하다가 본인이 만들고 있는 프로젝트의 악영향을 많이 끼칠 수 있기 때문이다.
Static의 사용방법
예시 1) static 함수가
한번 선언하면 없어지지 않는 특징을 이용하여 이런 식으로 사용이 가능하다.
// static 속성의 변수 생성
using ~~~
public Class Settings
{
// static으로 만들어진 값은 모든 클래스의 인스턴스 공유
public static int playerCount = 0;
public Settings()
{
// 이 클래스로 만든 객체의 개수 파악용. 참조할 때마다 1씩 늘어날 것이다.
playerCount++;
}
}
만약 다른 클래스에서 객체로 생성한다면,
// Settings 클래스의 static 변수 사용
Public Class Game()
{
void Start()
{
Settings gameStart1 = new Settings();
Settings gameStart2 = new Settings();
Settings gameStart3 = new Settings();
int callCount = Settings.PlayerCount;
Debug.Log(callCount);
}
}
callCount의 디버그는 3이 찍힐 것이다.
글 쓰다 보니까 static을 쓸곳이 있긴 할까? 싶어서 나중에 중요하다 생각하면 글을 갱신해야겠다